我們1)以不同的伺服器端方式輸出,然後在頁面使用 jQuery 的 ajax 實現來調用伺服器端。這樣,就有了幾個不同於官方龐大 asp.net ajax 之外的 ajax 解決方案:
- 使用一般的 webform,在頁面用 jQuery ajax 調用,再從取得的 html 資料中取得 <body> 內的內容,寫入 DOM
- 優點:不用改變現有的 asp.net 開發模式,可以使用現成的頁面;ajax 取得的內容是 html 文本,直接寫入 DOM 即可
- 缺點:內容浪費,<body> 之外的內容都不是必要的,而且如果使用了 MasterPage 那就。。。
- 使用一般的 webform,但是用 Response.Write() 控制輸出 html ,在頁面用 jQuery ajax 調用,將擷取的內容寫入 DOM
- 優點:內容乾淨,不浪費;ajax 取得的內容是 html 文本,可以直接寫入 DOM
- 缺點:需要在伺服器端以字串形式構造html文本,編程不方便,不容易調試和維護
- 使用一般的 webform,用 Response.Write() 控制輸出 json 資料,在頁面用 jQuery ajax 調用,將 json 資料在用戶端加工成 html 後寫入 DOM
- 優點:僅僅交換 json 資料,極乾淨,符合高效的 web 設計理念
- 缺點:需要在用戶端加工 json 資料,並且對 DOM 造成入侵
- 使用 asmx,封裝成 web service,用 jQuery ajax 調用 asmx 的內容,將 json 或者 xml 資料在用戶端加工成 html 後寫入 DOM
- 優點:僅僅交換 json或 xml 資料,非常乾淨;web service 易於跨平台
- 缺點:需要在用戶端加工 json 資料,並且對 DOM 造成入侵
- 使用自訂控制項 ascx,然後使用專門的 webform 頁面做 wrapper(封裝)在頁面用 jQuery ajax 調用 wrapper webform,將 html 資料寫入 DOM
- 優點:webform 僅僅用作 wrapper,根據不同的請求參數可以在 wrapper 中動態使用自訂控制項;自訂控制項輸出的是 html 文本,可以直接寫入 DOM;編程方便,有 VS2008 代碼感知支援,易於調試和維護
- 缺點:跟傳統的 webform 編程理念不一樣,弱化了 webform 的作用
以上就是討論的幾種可行的方案——不管是 asp.net webform 方式還是 asp.net MVC 方式,都是可行的。
昨天晚上又發現一種方案:使用 ashx+jQuery。
.ashx 是一個專門的用於處理 HttpHandler 的檔案類型,用來處理自訂 Http 請求,可以在 web.config 定義運行時針對 ashx 的 Http 請求處理方式。
<add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory" validate="false" />
這樣我們就可以用 SimpleHandlerFactory 來處理 ashx 的 http 請求了。
在 ashx 的類中實現 IRequiresSessionState 介面,using 一下 System.Web.SessionState 就可以使用 Session 了,很方便
using System.Web.SessionState;
public class checkCookie : IHttpHandler ,IRequiresSessionState
{
// todo somthing
}
執行個體:使用 ashx+jQuery 實現 Email 存在的驗證
.ashx 檔案
<%@ WebHandler Language="C#" Class="CheckUser" %>
using System;
using System.Web;
public class CheckUser : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(UserRule.GetInstance().IsUserExist(context.Request["Email"]));
}
public bool IsReusable
{
get
{
return false;
}
}
}
html:
<input type="text" id="email" />
<input type="button" value="test" onclick="check_email()" />
js:
function check_email()
{
var email = $("#email").attr("value");
$.get("../ajax/checkuser.ashx",
{ Email: email },
function(data)
{
window.alert(data);
});
}
simple 的,顯然效率會比較高。 不過 simple 的就只能夠做點 simple 的事情。如果要輸出 html,還是不太方便。如果要輸出 html 的話,我還是比較傾向於用 ascx 處理內容,webform 做封裝 所以 ashx+jQuery 應該算是是一個 asp.net 裡輕量級的解決方案