成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用XML+XSLT+CSS+JQuery組建ASP.NET網站

開發 后端
本文將介紹用XML+XSLT+CSS+JQuery+WebService組建ASP.NET網站,這種組建方法,需要開發人員具備較強的實力。

前言

早在Web標準化風潮到來之前 ,我就考慮過XML+XSLT建站了,我以為這是一種非常優雅、 高效、低耦的方案,必將大行其道。

然而時至今日,使用這種方案建站的人依然寥寥無幾,大家還都在抱著Web標準化不撒手,其實Web標準化只是 將表現(Css)分離了出來,而數據和結構仍然混雜在一起 ,它絕對不是我們最終的歸宿,它只是一個過渡品。

XHtml標準的建立初衷,其實也就是為了向 XML過渡的,XML+XSLT+CSS才真正做到數據、結構、表現的完美分離,才是我們的終極目標。

誠然,XML+XSLT確實有其技術難度, 我想這是它難于普及的最大障礙所在,但我覺得隨著時間的推移、觀念的更新、工具的發展, 這仍舊是我們必會到達的一站。

方案簡介

XML+XSLT+CSS的方案將數據、結構、表現進行 了分離,而依托JQuery我們又可以輕松地將交互也從中分離 出來,這樣在客戶端就達到了近乎完美的解耦。

[[2865]]

而在服務器端,我們只負責輸入和輸出:

輸入部分使用WebService,主要用于 接收客戶端提交的數據,以更新服務器數據。

輸出部分即為XML,可以有兩種實現方 案:

1. 動 態型。使用一個擴展名為.ashx處理程序負責輸出 XML,只要通過此處理程序從數據庫取出客戶端需要的數據 ,并轉換為XML文檔輸出即可。動態型的好處在于支持 Url參數查詢及其他復雜查詢處理。

2.靜態型。放棄數據庫,將所有用于呈現的數據都直接寫為XML文件。靜態型的好處當然就是服務器負荷極低了,在不提交數據的情況 下,服務器會比純靜態HTML網站還要輕松很多。

[[2866]]

優勢

對比以往的各種開發方案,我總結出此方案具有以下優勢:

1.更便于團隊協作。充分解耦帶來的就是細化分工及并行開發,以往的各 種開發方案中,總有許多地方界限模糊,致使前臺與后臺、程序員與設計師頻繁磋商,延誤開 發效率。

比如僅僅是一個XHTML文檔, 設計師要在上面定義文檔結構,以及IDClass,前臺程序員要在上面寫客戶端事件,后臺程序員得把從數據庫中取 得的數據插入到頁面中的某處,三方的工作都受其牽制,這時XHTML就像是一個接口,三方共用著這一個接口。

而我們的這個方案中的情況是怎樣的呢?后臺程序員只管怎么跟 數據庫打交道、怎么處理業務邏輯,客戶端需要數據時,只要扔出個XML文檔就可以了; 作為設計師,只要知道XML文檔結構,就可以通過XSLT靈活地安排布局 ,即使需要大幅修改布局,也不需要勞煩后臺程序員插手,簡單的XSLT語法對于設計師不是什么大問題;前臺程序員需要知道用戶界面中有哪些交互 控件,為他們安排事件邏輯,并提交到后臺的WebService中 去就可以了;這時XMLXSLTWebService就像是三個接口,一方最多接 觸其中的兩個。

接口多了好,還是少了好?可以看看索愛手機的例子,索愛手機 大多是耳機、充電、數據傳輸都共用著一個接口,充電的時候不能插耳機聽歌、插耳機聽歌的 時候不能傳數據、傳數據的時候不能充電,而其他品牌的手機則大多是分別使用多個接口的, 哪個更方便不言自明吧。(當然,從安全角度來看的話,索愛的單接口卻是更優秀的,此前曾 有新聞報道過某男用手機邊聽歌邊充電被雷擊致死的事故,那人在死前還大喊:“??!我死啦 !”-_-#,圍觀地址

2.更節省服務器資源。帶寬資源方面:此方案中,用戶每次切換頁面,所 需下載的都只是一個XML文檔而已,其他XSLT、CSSJS都只需下載一次,提交時也不需要表單回發,更不需要ViewState。處理器資源方面:客戶端呈現完代碼全由XSLT在客戶端動態合成,服務器端的工作僅僅是處理業務邏輯和數據庫交互,極其 輕松。此方案的資源消耗水平略高于Ajax方案,低于 MVC方案,相對于WebForm、MVP及傳統腳本式的方案來說,節省的 資源非常可觀。

3.更易于搜索引擎收錄。首先就是此方案可以被搜索引擎收錄,而 Ajax方案的弊端就在這里;其次,搜索引擎喜歡冗余少的網 站,這會一定程度上影響網站排名,而XML數據最為符合這 一要求;再者,網址較為友好,這是相對MVC而言的,具體 原因可參看我此前發表的一篇文章 。

4.更容易在其他客戶端中使用。這一點Ajax方案也同樣優秀,MVP方案實現起來有些困 難,其他的方案都難以實現。

弊端

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

1. 更 高的技術要求。顯然相比以往的方案,此方案需要開發者掌握更多知識,并組合應用。

2.更高的客戶端負荷。XSLT加重了客 戶端的處理壓力,雖然我們大都覺得客戶端的運算資源負荷是一個可以忽視的問題,從而將盡 可能多的運算放到客戶端,但并不是所有客戶都使用中高端的機器,尤其是對一些上網本用戶 而言,JS已經讓他們頭疼了。

3.更差的兼容性。HTMLJS、CSS在各個瀏覽器上 本就有些兼容性問題,現在XSLT又摻合進來,開發者面臨的 問題更為嚴峻。并且對于移動客戶端、盲人閱讀器及其他非常規客戶端而言,XSLT是否會被解析都是個疑問。

#p#

范例

現在演示一個網站范例。

首先建立一個數據庫,這里使用的Accesee 2000-2003數據庫,命名為Database.mdb,在其中建 立User表:

clip_image006

輸入一些數據,用于測試顯示:

clip_image008

將其導入網站項目中的App_Data目錄 。

添加一個ashx文件,名為 Default.ashx

clip_image010

輸入以下代碼:

<% @ 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;

}

}

}

再添加一個XSLT文件,命名為 Default.xslt,輸入以下代碼:

xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:msxsl="urn:schemas-microsoft- com:xslt" exclude-result-prefixes="msxsl"

>

<xsl:template match="/">

<html>

<hread>

<title>XML網站測試title>

<link href="Style.css" rel="stylesheet" type="text/css"/>

<script src="jquery-1.3.2.js" type="text/javascript"/>

<script src="Post.js" type="text/javascript"/>

hread>

<body>

<h1>XML網站測試h1>

<ul>

<xsl:for-each select="http://Table">

<li>

<a href="#">

<xsl:value-of select="ID"/>

a>

<xsl:value-of select="UserName"/>

li>

xsl:for-each>

ul>

<input type="text" name="Name" id="Name" />

<input type="submit" name="PostName" id="PostName" value="提交" />

body>

html>

xsl:template>

xsl:stylesheet>

注意,在XSLT中可包含用于提交數據的交互控件, 但不需要為其定義事件處理,交互處理都由JS完成。

添加一個CSS文件,命名為 Style.css,輸入以下代碼:

body

{

background-color: Silver;

}

h1

{

color: Gray;

}

a

{

color:White;

margin- right:6px;

}

編譯并運行,即可看到輸出的數據:

clip_image012

查看其源代碼:

clip_image014

用戶訪問不同頁面時,只有這些 XML代碼會被多次 下載,其他客戶端的文件都只需下載一次,大大節省了服務器網絡資源。

由于此前在ashx中編寫了支持 Url參數查詢的代碼,我們可以通過設置max參數來決定顯示的最大數據條目數:

clip_image016

輸出部分至此就完成了,接下來是輸入部分:

導入JQuery代碼jquery-1.3.2.js到項目中。

添加一個JS文件,命名為 Post.js,輸入以下代碼:

///

$(function() {

$("#PostName").click(function() {

$.post("./webservice.asmx/AddName", { "Name": $("#Name").attr("value") }, function() { location.reload(); })

});

}

);

可以看到,通過JQueryJS代碼文件中為按鈕注冊處理函 數非常簡單,這樣就將交互部分完全分離開來。

添加一個WebService,命名為 WebService.asmx,在其后臺代碼文件WebService.cs中輸入如下代碼:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

using System.Data.OleDb;

///

///WebService 的摘要說明

///

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

//若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的注釋。

// [System.Web.Script.Services.ScriptService]

public class WebService : System.Web.Services.WebService {

public WebService () {

//如果使用設計的組件,請取消注釋以下行

//InitializeComponent();

}

[WebMethod(Description="添加一個新的用戶名")]

public void AddName(string Name) {

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")));

c.Open();

new OleDbCommand(string.Format("INSERT INTO [User] VALUES ('{0}','{1}')",Guid.NewGuid (),Name),c).ExecuteNonQuery ();

c.Close();

}

}

編譯并執行,測試提交數據:

clip_image018

提交成功后會刷新頁面(JS里的回調 函數所為),刷新后的輸出數據:

clip_image020

此范例完成,解決方案資源管理器中顯示的目錄結構如下:

clip_image021

可預見的問題

一定要用JQuery嗎?

不,只是方便而已,其他框架或自寫JS也都可以實現。

我的網站需要側邊欄顯示一些熱門文章排行之類的東西,該怎么 實現呢?

可以通過Ajax的方式,配合 WebService異步獲取數據,但這樣的話搜索引擎沒法收錄這 些數據。

也可以將這些數據直接寫在XML里,但 這樣的話又會造成冗余。

比較妥當的方法是將XSLT也改為由 ashx處理程序動態生成,在里面寫入這些數據,但這樣會增 加服務器負荷,注意設好緩存應該影響不大,另外的副作用就是使后臺開發人員和設計師又親 密接觸了。

怎么使用Session?怎么使 用Membership

我們的XML文件是使用ashx處理的,實質上它和aspx沒多大區 別,可以通過HttpContext.Current.Session訪問到 Session,要干什么都可以在里面干了。如果要由客戶端改 變Session的值,只要通過WebService就可以了。

使用Membership也是同樣道理,只不 過少了那些登錄控件什么的,你必須手動編寫代碼來控制了。

結語

XMLXHtml的終極目標,雖然現在將XML用于網站開發 或許還不夠成熟,但是應該距成熟不遠了,Ajax的誕生進一 步奠定了前往XML的路,這路必定會越來越好走的。

我承認,我喜歡研究一些非主流的東西==,此前還研究過用XAML做網頁,HOHO,也許RIA才是未來的王者也說不定。

【編輯推薦】

  1. 亮劍.NET:圖解ASP.NET網站開發實戰
  2. 作為ASP.NET開發人員必須養成的編程習慣
  3. 視頻教程:ASP.NET Web開發詳解
責任編輯:彭凡 來源: cnblogs
相關推薦

2009-07-27 14:46:16

XML和ASP.NET

2009-07-29 09:14:36

ASP.NET網站

2009-07-28 14:40:15

XML數據ASP.NET

2009-07-23 14:08:58

2009-07-23 15:18:30

創建XML Web服務ASP.NET

2012-04-09 10:34:21

jQuery

2009-07-28 16:29:06

XML Web服務ASP.NET構造

2009-07-28 17:34:28

ASP.NET XML

2009-08-05 17:58:34

實現ASP.NET網站

2009-07-23 15:11:43

XML Web服務方法ASP.NET

2009-07-22 17:45:35

ASP.NET教程

2009-07-29 09:17:12

jQuery刪除

2009-07-22 17:28:07

CSS文件ASP.NET 2.0

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-27 17:20:05

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2012-04-28 11:07:15

2011-04-08 10:15:11

2009-07-29 15:26:43

ASP.NET連接Or
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久成人 | 亚洲精品在线观看视频 | 国产精品日韩欧美一区二区三区 | 中文精品视频 | 亚洲精品视频免费观看 | www.99精品 | 精品一区二区视频 | 黑人精品 | 91麻豆蜜桃一区二区三区 | www成人免费视频 | 国内精品久久久久久影视8 最新黄色在线观看 | 欧美日韩亚洲一区 | 国产在线中文字幕 | 国产在线二区 | 国产成人综合在线 | 日韩欧美一级片 | 第一色在线| 一级毛片免费视频 | 亚洲视频中文 | 孕妇一级毛片 | 久色视频在线 | 欧美一区二区综合 | 午夜精品一区 | 一区二区三区四区在线 | 亚洲综合婷婷 | 亚洲一区自拍 | 日本天堂一区二区 | 91婷婷韩国欧美一区二区 | 超碰在线观看97 | 91久久久久久久久久久久久 | a级片网站| 欧美极品在线 | 欧美激情视频一区二区三区免费 | 亚洲va欧美va人人爽午夜 | 亚洲精品一级 | 免费99精品国产自在在线 | 在线黄| 日韩精品免费视频 | 午夜成人在线视频 | 国产一区高清 | 国产一区二区视频在线 |