XML+XSLT+CSS+JQuery+WebService组建Asp.Net网(2)


 

  3.       更易于搜索引擎收录。首先就是此方案可以被搜索引擎收录,而Ajax方案的弊端就在这里;其次,搜索引擎喜欢冗余少的网站,这会一定程度上影响网站排名,而XML数据最为符合这一要求;再者,网址较为友好,这是相对MVC而言的,具体原因可参看我此前发表的一篇文章。

  4.       更容易在其他客户端中使用。这一点Ajax方案也同样优秀,MVP方案实现起来有些困难,其他的方案都难以实现。

  弊端

  没有完美的事物,此方案弊端如下:

  1.       更高的技术要求。显然相比以往的方案,此方案需要开发者掌握更多知识,并组合应用。

  2.       更高的客户端负荷。XSLT加重了客户端的处理压力,虽然我们大都觉得客户端的运算资源负荷是一个可以忽视的问题,从而将尽可能多的运算放到客户端,但并不是所有客户都使用中高端的机器,尤其是对一些上网本用户而言,JS已经让他们头疼了。

  3.       更差的兼容性。HTML、JS、CSS在各个浏览器上本就有些兼容性问题,现在XSLT又掺合进来,开发者面临的问题更为严峻。并且对于移动客户端、盲人阅读器及其他非常规客户端而言,XSLT是否会被解析都是个疑问。


 范例

  现在演示一个网站范例。

  首先建立一个数据库,这里使
用的Accesee 2000-2003数据库,命名为Database.mdb,在其中建立User表:

  输入一些数据,用于测试显示:

  将其导入网站项目中的App_Data目录。

  添加一个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;

        }

    }

 

}


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3