在客户端使用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

Asp.net相关问答推荐

包含Include的低速EF核心查询

log4net 记录所有未处理的应用程序错误

带有模型的 mvc 上传文件 - 第二个参数发布的文件为空

如何在页面加载之前运行 JavaScript 代码?

如果站点在 localhost 或 127.0.0.1 上运行,如何判断 ASP.NET MVC 视图

c# - 如何从列表中获取值的总和?

使用 ASP.NET WebForms 的 jQuery DataTables 服务器端处理

在 IIS 上托管 ASP.NET 5 项目

返回 IHttpActionResult vs IEnumerable vs IQueryable

asp.net 中的 Eval() 有什么用

LINQ to Entities 无法识别 MVC 4 中的System.String ToString()方法

ASP.NET 中的多选下拉列表

从后面的 asp.net 代码中读取表单身份验证 cookie

如何在 ASP.NET 页面中以编程方式生成 401 错误

在 ASP.NET 中使用 Messenger Connect 客户端库时出现 Javascript 错误

单击按钮时播放哔声

ASP.NET Core 中的 NuGet 包位置在哪里?

如何在 ASP.NET 中获取原始请求正文?

System.Linq.IQueryable 不包含Where的定义

将 HTML 字符串转换为图像