2010-03-02 92 views

回答

14

您可以使用内置的ASP.NET AJAX。

选项1 - 使用Web服务(如果你想要的功能可重用):

  • 创建一个Web服务(的.asmx)用[ScriptService]属性,
  • 添加到您的网页并将Web服务添加到其服务集合中,使用ScriptManager在yor页面中生成的JavaScript代理

选项2 - 使用页面方法(如果您想在不创建一个Web服务的单页上的功能):

  • 定义在你的页面的静态方法,添加[WebMethod]属性给他们,
  • 使用EnablePageMethods =“true”添加ScriptManager,
  • 使用PageMethods对象从JavaScript调用这些方法。

无论哪种情况,JSON都将用于数据传输。

这是一个广泛的tutorial与一些代码示例。

但是,ASP.NET AJAX经常被归咎于效率低下 - 例如,它生成的JS往往会相当大。所以,如果你关心性能,你会想要彻底地测试它。

您也可以看看这个线程:.NET AJAX Calls to ASMX or ASPX or ASHX?

+0

页的方法是溶液。 – ProfK 2011-08-04 17:55:08

2

使用通用web处理程序。即ashx。这些速度甚至比操作的MVC更快。

2
+0

理论上可以。但是,在实际使用中,您可能会遇到锁定会话的问题:默认情况下,来自Web表单页面的每个请求都与用户会话相关联,因此您只能逐个执行Ajax请求。它对您的项目可能并不重要 – 2016-05-13 05:44:45

+1

您可以对大多数请求使用只读会话,对于登录/注销可以使用读写。它可以防止锁定问题。会话默认情况下未启用Web API。我必须从Application_PostAuthorizeRequest中调用方法:HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.ReadOnly); – 2016-05-13 08:54:53

+0

我很担心,因为我们试图在传统的ASP.NET Web表单中包含一个Web API模块。确实,Web API默认没有会话,但是当它与Web Form结合使用时,它确实没有会话。我们甚至可以从API请求中读取会话信息。通常情况下,这是不是一个问题,直到我们有一些沉重的API调用 – 2016-05-13 09:06:32

0

我在这种情况下首选的方法是使用一个通用的网络处理器(ashx的)和JSON.net http://james.newtonking.com/json

很简单,速度快,重量轻。

一个简单的例子是:

public void ProcessRequest(HttpContext context) 
{ 
     string jsonOutput = string.Empty; 
     context.Response.ContentType = "application/json"; 
     using (var db = new MyDBContext()) 
     { 
      var dbResult = db.myobject.select(); 
      jsonOutput = Newtonsoft.Json.JsonConvert.SerializeObject(dbResult); 
     } 
     context.Response.Write(jsonOutput); 
}