3. 更易於搜索引擎收錄。首先就是此方案可以被搜索引擎收錄,而AJax方案的弊端就在這裡;其次,搜索引擎喜歡冗余少的網站,這會一定程度上影響網站排名,而XML數據最為符合這一要求;再者,網址較為友好,這是相對MVC而言的,具體原因可參看我此前發表的一篇文章。
4. 更容易在其他客戶端中使用。這一點AJax方案也同樣優秀,MVP方案實現起來有些困難,其他的方案都難以實現。
弊端
沒有完美的事物,此方案弊端如下:
1. 更高的技術要求。顯然相比以往的方案,此方案需要開發者掌握更多知識,並組合應用。
2. 更高的客戶端負荷。XSLT加重了客戶端的處理壓力,雖然我們大都覺得客戶端的運算資源負荷是一個可以忽視的問題,從而將盡可能多的運算放到客戶端,但並不是所有客戶都使用中高端的機器,尤其是對一些上網本用戶而言,JS已經讓他們頭疼了。
3. 更差的兼容性。Html、JS、CSS在各個浏覽器上本就有些兼容性問題,現在XSLT又摻合進來,開發者面臨的問題更為嚴峻。並且對於移動客戶端、盲人閱讀器及其他非常規客戶端而言,XSLT是否會被解析都是個疑問。
范例
現在演示一個網站范例。
首先建立一個數據庫,這裡使
用的Accesee 2000-2003數據庫,命名為Database.mdb,在其中建立User表:
輸入一些數據,用於測試顯示:
添加一個ashx文件,名為Default.ashx:
圖片看不清楚?請點擊這裡查看原圖(大圖)。
輸入以下代碼:
<%@ WebHandler Language="C#" Class="Default" %>
using System;
using System.Web;
using System.Data.OleDb;
using System.Data;
using System.XML;
public class Default : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
OleDbConnection c = new OleDbConnection(string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""{0}"";Persist Security Info=True", HttpContext.Current.Server.MapPath(@"~\App_Data\Database.mdb")));
var ds = new DataSet();
c.Open();
//獲取Url中的max參數
var max = 0;
Int32.TryParse(HttpContext.Current.Request.QueryString["max"],out max);
//讀取數據
new OleDbDataAdapter(string.Format("select{0} * from [User]", max > 0 ? " top " + max : string.Empty), c).Fill(ds);
c.Close();
//建立XML文檔
var xml = new XMLDocument();
xml.LoadXml(ds.GetXML());
//添加文檔聲明
xml.InsertBefore(xml.CreateXmlDeclaration("1.0", "UTF-8", null), XML.DocumentElement);
//添加xslt聲明
var xsl = xml.CreateProcessingInstruction("XML-stylesheet", @"type=""text/xsl"" href=""Default.xslt""");
xml.InsertBefore(xsl, XML.DocumentElement);
//輸出
context.Response.ContentType = "application/XML";
context.Response.Write(xml.InnerXML);
}
public bool IsReusable
{
get
{
return false;
}
}
}