2010-03-02 85 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); 
}