使用AJAX从客户端通过javascript调用某些业务逻辑的最有效方法是什么?看起来您可以直接从javascript调用aspx上的[WebMethod](在我的情况下,我使用JQuery来帮助)或者您可以直接调用.asmx。哪个电话会产生更少的开销?什么是最佳做法?
此外,[ScriptService]属性对类的作用是什么?我之前从未使用过.aspx [WebMethod]方法,一切似乎都运行正常。
我希望这是一个纯粹客观的问题。提前谢谢!
答案 0 :(得分:30)
我认为ScriptService的东西是asp.net中隐藏的宝石。对脚本服务的调用不会回传表单数据+ viewstate,它们是精简,快速的JSON有效负载。
最好的部分,ASP.NET3.5的脚本管理器可以为您生成一个JS方法,为您调用并设置所需的任何JS类。
一个简单的示例,用于获取“Person”的详细信息,假设Person是C#类。
在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 */
}
}
}
在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 ScriptService的东西。即使你决定不使用它,这也是一个非常邪恶的功能。
<强>链接强>
答案 1 :(得分:16)
如果您只关心服务器端开销,那么将带有查询字符串的简单GET发送到ASHX可能就是这样。它绝对比.ASPX更好,它会经历你不需要的页面生命周期。
ASMX Web方法的优势在于它基于可以被其他技术轻松调用的标准(支持发现)。有了一些文档,你的.ASHX就像打电话一样容易。
答案 2 :(得分:13)
你说问题的方式,我相信你正在考虑ASMX“ScriptService”,ASHX HttpHandler和ASP.NET AJAX“PageMethod”(不是实际的ASPX页面)之间的区别。
如果是这种情况,它们都非常相似。出于所有意图和目的,ASP.NET AJAX PageMethods与ASMX ScriptServices完全相同。它们不会创建页面的实例,因此它们不会产生通常与ASPX页面相关的开销。
除非你在谈论使用请求使服务器饱和,否则你可能会发现这三者的表现相当。