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;
}
}
}