在客户端使用AJAX从javascript调用某些业务逻辑的最有效方法是什么?看起来您可以直接从javascript在aspx上调用[WebMethod](在我的例子中,我使用JQuery来提供帮助),或者您可以调用.asmx直接.哪个电话的开销更小?最佳实践是什么?
此外,[ScriptService]属性对类有什么作用?我以前从未在我的手机上使用过这个.aspx[WebMethod]方法,一切似乎都很好.
我希望这是一个纯粹客观的问题.提前谢谢!
在客户端使用AJAX从javascript调用某些业务逻辑的最有效方法是什么?看起来您可以直接从javascript在aspx上调用[WebMethod](在我的例子中,我使用JQuery来提供帮助),或者您可以调用.asmx直接.哪个电话的开销更小?最佳实践是什么?
此外,[ScriptService]属性对类有什么作用?我以前从未在我的手机上使用过这个.aspx[WebMethod]方法,一切似乎都很好.
我希望这是一个纯粹客观的问题.提前谢谢!
在我看来,ScriptService是ASP.NET中隐藏的Ruby .对脚本服务的调用不会从Data+ViewState回传,它们是精简、快速的JSON有效负载.
这是最好的部分,ASP.NET3.5的scriptmanager可以为您完成有关生成JS方法供您调用以及设置所需的任何JS类的大部分工作.
假设Person是C#类,这是一个获取"Person"详细信息的简单示例.
In PersonService.asmx:个
namespace MyProj.Services {
[System.Web.Script.Services.ScriptService]
[System.Web.Script.Services.GenerateScriptType(typeof(Person))]
public class PersonService : System.Web.Services.WebService
{
[WebMethod, ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public Person GetPersonDetails(int id)
{
/* return Logic here */
}
}
}
In DetailsPage.aspx
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/Services/PersonService.asmx" />
</Services>
</asp:ScriptManager>
通过使用这样的设置,您甚至不需要JQuery的帮助来调用服务并获取C#Person类的JS版本,.NET可以为您完成所有这些工作. 从JS使用此服务的示例如下:
MyProj.Services.PersonService.GetPersonDetails(id, _onDetailsCallbackSuccess, _requestFailed, null);
_onDetailsCallbackSuccess: function(result, userContext, methodName) {
//all persons properties are now intact and available
document.getElementById('txtFirstname').value = result.Firtname;
}
无论如何,这将是更值得研究的ASP.NET Ajax脚本服务.即使你决定这次不使用它,这也是一个非常糟糕的特性.
Links