小编典典

.NET AJAX调用ASMX还是ASPX或ASHX?

ajax

使用AJAX在客户端从javascript调用某些业务逻辑的最有效方法是什么?看来您可以直接通过javascript在aspx上调用[WebMethod](在我的情况下,我正在使用JQuery来提供帮助),也可以直接调用.asmx。哪个呼叫产生的开销更少?最佳做法是什么?

另外,[ScriptService]属性对类有什么作用?我以前从未在.aspx [WebMethod]方法上使用过此功能,而且一切似乎都工作正常。

我希望这是一个纯粹的客观问题。提前致谢!


阅读 360

收藏
2020-07-26

共1个答案

小编典典

我认为ScriptService东西是asp.net中的隐藏宝石。调用脚本服务不会回传表单数据+ viewstate,它们是精简,快速的JSON有效负载。

最好的部分是,ASP.NET3.5的scriptmanager可以为您完成有关生成JS方法供您调用以及设置所需的任何JS类的大部分工作。

假设Person是C#类的一个简单示例,用于获取“ Person”的详细信息。

在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的东西。即使您这次决定不使用它,它也是一个非常邪恶的功能。

链接

2020-07-26