一个简单的LINQ TO XML, AJAX 例子[译]
????? 這個(gè)教程是用Visual Studio.net 2008建立,也可以使用VS2005,但你需要從這里下載安裝Microsoft's ASP.NET AJAX Extensions,AJAX和LINQ是微軟目前主要焦點(diǎn),兩個(gè)看上去不足為奇,但背后都隱藏著巨大的潛力和力量。在這個(gè)示例中,我們將看到如何用AJAX同LINQ,XML創(chuàng)建一個(gè)Web應(yīng)用程序,我們能用看到瞬間存儲(chǔ)數(shù)據(jù),也能瞬間增加數(shù)據(jù)。AJAX提供簡(jiǎn)單易用的方式平穩(wěn)高效地創(chuàng)建應(yīng)用程序。如果是一個(gè)桌面應(yīng)用程序,而LINQ提供了一種方式與XML文件和數(shù)據(jù)存儲(chǔ)進(jìn)行交流和互動(dòng)。
??? 首先,我們需要做的是創(chuàng)建我們的XML文件。對(duì)于這個(gè)例子中,我們將使用像這樣:
<Persons>?
<Person>?
<Name>Paxton</Name>
<City>Munich</City>
<Age>29</Age>
</Person>
<Person>?
<Name>Mike</Name>
<City>Orlando</City>
<Age>33</Age>
</Person>
</Persons>
??? 我們將創(chuàng)建一種既讀取和寫入XML文件:我們將需要三個(gè)Textbox和一個(gè)增加的Button,然后是另一個(gè)button和一個(gè)用于讀去的textbox。我們將構(gòu)建一個(gè)這樣類似的Form: <form?id="form1"?runat="server">?
<strong>Add?to?XML</strong><br?/>
Name:<br?/>
<asp:TextBox?ID="txtName"?runat="server"?/><br?/>
City:<br?/>
<asp:TextBox?ID="txtCity"?runat="server"?/><br?/>
Age:<br?/>
<asp:TextBox?ID="txtAge"?runat="server"?/><br?/>
<asp:Button?ID="butAdd"?runat="server"?Text="Add"?onclick="butAdd_Click"?/><br?/>
<asp:Label?ID="lblStatus"?runat="server"?/>
<br?/><br?/>
<strong>Read?XML:</strong><br?/>
<asp:Button?ID="butRead"?runat="server"?Text="Read"?onclick="butRead_Click"?/><br?/>
<asp:TextBox?ID="txtResults"?runat="server"?Columns="25"?Rows="10"?
TextMode="MultiLine"?/>
</form>?
??? 注意那是我們的buttons有一個(gè)OnClick 句柄指向一個(gè)方法。我們將這幾分鐘完成,但首先,讓我們完成我們的ASPX頁(yè)面。剩下的事兒是使頁(yè)面的AJAX生效。我們?cè)黾右粋€(gè)ScriptManager和一個(gè)UpdatePanel,像這樣: <form?id="form1"?runat="server">?
<asp:ScriptManager?id="ScriptManager1"?runat="server"?/>
<asp:UpdatePanel?ID="updAdd"?runat="server">
<Triggers>?
<asp:AsyncPostBackTrigger?ControlID="butAdd"?EventName="Click"?/>
</Triggers>
<ContentTemplate>?
<strong>Add?to?XML</strong><br?/>
Name:<br?/>
<asp:TextBox?ID="txtName"?runat="server"?/><br?/>
City:<br?/>
<asp:TextBox?ID="txtCity"?runat="server"?/><br?/>
Age:<br?/>
<asp:TextBox?ID="txtAge"?runat="server"?/><br?/>
<asp:Button?ID="butAdd"?runat="server"?Text="Add"?onclick="butAdd_Click"?/><br?/>
<asp:Label?ID="lblStatus"?runat="server"?/>
<br?/><br?/>
<strong>Read?XML:</strong><br?/>
<asp:Button?ID="butRead"?runat="server"?Text="Read"?onclick="butRead_Click"?/><br?/>
<asp:TextBox?ID="txtResults"?runat="server"?Columns="25"?Rows="10"?
TextMode="MultiLine"?/>
</ContentTemplate>
</asp:UpdatePanel>
</form> ??
?? 在我們開始編碼之前,我們應(yīng)該務(wù)必使用正確的名稱空間。我們將使用LINQ TO XML,所以我們需要 System.Xml.Linq。代碼看上去像這樣: using?System;
using?System.Configuration;
using?System.Data;
using?System.Linq;
using?System.Web;
using?System.Web.Security;
using?System.Web.UI;
using?System.Web.UI.HtmlControls;
using?System.Web.UI.WebControls;
using?System.Web.UI.WebControls.WebParts;
using?System.Xml.Linq; ?
??? 現(xiàn)在回到Buttons,我們已經(jīng)增加了一個(gè)Button的句柄,所以我們現(xiàn)在完成了ASPX頁(yè)面,現(xiàn)在可以編寫我們方法了,我們將創(chuàng)建一個(gè)讀去XML文件的方法,這個(gè)方法使一次或更多(你過會(huì)兒將看其它button的Click就知道為什么了)。我們的方法寫成像這樣:
????????protected?void?readXML()????????{
????????????XDocument?xmlDoc?=?XDocument.Load(Server.MapPath("People.xml"));
????????????var?persons?=?from?person?in?xmlDoc.Descendants("Person")
??????????????????????????select?new
??????????????????????????{
??????????????????????????????Name?=?person.Element("Name").Value,
??????????????????????????????City?=?person.Element("City").Value,
??????????????????????????????Age?=?person.Element("Age").Value,
??????????????????????????};
????????????txtResults.Text?=?"";
????????????foreach?(var?person?in?persons)
????????????{
????????????????txtResults.Text?=?txtResults.Text?+?"Name:?"?+?person.Name?+?"\n";
????????????????txtResults.Text?=?txtResults.Text?+?"City:?"?+?person.City?+?"\n";
????????????????txtResults.Text?=?txtResults.Text?+?"Age:?"?+?person.Age?+?"\n\n";
????????????}
????????????if?(txtResults.Text?==?"")
????????????????txtResults.Text?=?"No?Results.";
????????} ?
這方法使用了LINQ連接XML文件,然后選擇文件里全部數(shù)據(jù)。一個(gè)選取,我們循環(huán)每條“record”輸出到textbox控件。我們這種方法為button的Click的事件:
???????protected?void?butRead_Click(object?sender,?EventArgs?e)????????{
????????????readXML();
????????????lblStatus.Text?=?"";
????????} ?
接下來是增加數(shù)據(jù)到XML文件。這實(shí)際上需要比讀去更少的代碼量,我們將在button的click事件下直接編碼。就這兒一樣:
???????protected?void?butAdd_Click(object?sender,?EventArgs?e)????????{
????????????try
????????????{
????????????????XDocument?xmlDoc?=?XDocument.Load(Server.MapPath("People.xml"));
??????????????
????????????????xmlDoc.Element("Persons").Add(new?XElement("Person",?new?XElement("Name",?txtName.Text),
????????????????new?XElement("City",?txtCity.Text),?new?XElement("Age",?txtAge.Text)));
????????????????xmlDoc.Save(Server.MapPath("People.xml"));
????????????????lblStatus.Text?=?"Data?successfully?added?to?XML?file.";
????????????????readXML();
????????????}
????????????catch
????????????{
????????????????lblStatus.Text?=?"Sorry,?unable?to?process?request.?Please?try?again.";
????????????}
????????} ?
我們使用try,catch語句減少錯(cuò)誤處理。接著,我們使用LINQ增加數(shù)據(jù)到XML文件。當(dāng)我們第一次加載文件時(shí),然后我們簡(jiǎn)單增加了一個(gè)新的element到父element,請(qǐng)看到前面提及XML結(jié)構(gòu)有助于理解。
完整的code-behind是這樣的:
codeusing?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Web;
using?System.Web.UI;
using?System.Web.UI.WebControls;
using?System.Xml.Linq;
namespace?THttpModule.LinqtoXml
{
????public?partial?class?Add?:?System.Web.UI.Page
????{
????????protected?void?Page_Load(object?sender,?EventArgs?e)
????????{
????????}
????????protected?void?butRead_Click(object?sender,?EventArgs?e)
????????{
????????????readXML();
????????????lblStatus.Text?=?"";
????????}
????????protected?void?butAdd_Click(object?sender,?EventArgs?e)
????????{
????????????try
????????????{
????????????????XDocument?xmlDoc?=?XDocument.Load(Server.MapPath("People.xml"));
??????????????
????????????????xmlDoc.Element("Persons").Add(new?XElement("Person",?new?XElement("Name",?txtName.Text),
????????????????new?XElement("City",?txtCity.Text),?new?XElement("Age",?txtAge.Text)));
????????????????xmlDoc.Save(Server.MapPath("People.xml"));
????????????????lblStatus.Text?=?"Data?successfully?added?to?XML?file.";
????????????????readXML();
????????????}
????????????catch
????????????{
????????????????lblStatus.Text?=?"Sorry,?unable?to?process?request.?Please?try?again.";
????????????}
????????}
????????protected?void?readXML()
????????{
????????????XDocument?xmlDoc?=?XDocument.Load(Server.MapPath("People.xml"));
????????????var?persons?=?from?person?in?xmlDoc.Descendants("Person")
??????????????????????????select?new
??????????????????????????{
??????????????????????????????Name?=?person.Element("Name").Value,
??????????????????????????????City?=?person.Element("City").Value,
??????????????????????????????Age?=?person.Element("Age").Value,
??????????????????????????};
????????????txtResults.Text?=?"";
????????????foreach?(var?person?in?persons)
????????????{
????????????????txtResults.Text?=?txtResults.Text?+?"Name:?"?+?person.Name?+?"\n";
????????????????txtResults.Text?=?txtResults.Text?+?"City:?"?+?person.City?+?"\n";
????????????????txtResults.Text?=?txtResults.Text?+?"Age:?"?+?person.Age?+?"\n\n";
????????????}
????????????if?(txtResults.Text?==?"")
????????????????txtResults.Text?=?"No?Results.";
????????}
????}
}
?
下載示例項(xiàng)目
?
原文:Using AJAX, LINQ and XML in C#
http://www.ajaxtutorials.com/ajax-tutorials/using-ajax-linq-and-xml-in-c/
?
另:實(shí)際上判斷字符串空可以用String.IsNullOrEmpty方法。
翻譯:Petter ?(版權(quán)歸原作者)
http://wintersun.cnblogs.com
轉(zhuǎn)載于:https://www.cnblogs.com/wintersun/archive/2008/10/04/1303893.html
總結(jié)
以上是生活随笔為你收集整理的一个简单的LINQ TO XML, AJAX 例子[译]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDK1.6官方下载_JDK6官方下载地
- 下一篇: asp.net ajax控件工具集 Au