ashx + jQuery, a lightly ajax solution of asp.net

來源:互聯網
上載者:User
我們1)以不同的伺服器端方式輸出,然後在頁面使用 jQuery 的 ajax 實現來調用伺服器端。這樣,就有了幾個不同於官方龐大 asp.net ajax 之外的 ajax 解決方案:
  1. 使用一般的 webform,在頁面用 jQuery ajax 調用,再從取得的 html 資料中取得 <body> 內的內容,寫入 DOM
    • 優點:不用改變現有的 asp.net 開發模式,可以使用現成的頁面;ajax 取得的內容是 html 文本,直接寫入 DOM 即可
    • 缺點:內容浪費,<body> 之外的內容都不是必要的,而且如果使用了 MasterPage 那就。。。
  2. 使用一般的 webform,但是用 Response.Write() 控制輸出 html ,在頁面用 jQuery ajax 調用,將擷取的內容寫入 DOM
    • 優點:內容乾淨,不浪費;ajax 取得的內容是 html 文本,可以直接寫入 DOM
    • 缺點:需要在伺服器端以字串形式構造html文本,編程不方便,不容易調試和維護
  3. 使用一般的 webform,用 Response.Write() 控制輸出 json 資料,在頁面用 jQuery ajax 調用,將 json 資料在用戶端加工成 html 後寫入 DOM
    • 優點:僅僅交換 json 資料,極乾淨,符合高效的 web 設計理念
    • 缺點:需要在用戶端加工 json 資料,並且對 DOM 造成入侵
  4. 使用 asmx,封裝成 web service,用 jQuery ajax 調用 asmx 的內容,將 json 或者 xml 資料在用戶端加工成 html 後寫入 DOM
    • 優點:僅僅交換 json或 xml 資料,非常乾淨;web service 易於跨平台
    • 缺點:需要在用戶端加工 json 資料,並且對 DOM 造成入侵
  5. 使用自訂控制項 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 裡輕量級的解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.