一個簡單的LINQ TO XML, AJAX 例子[譯]

????? 這個教程是用Visual Studio.net 2008建立,也可以使用VS2005,但你需要從這里下載安裝Microsoft's ASP.NET AJAX ExtensionsAJAXLINQ是微軟目前主要焦點,兩個看上去不足為奇,但背后都隱藏著巨大的潛力和力量。在這個示例中,我們將看到如何用AJAXLINQ,XML創建一個Web應用程序,我們能用看到瞬間存儲數據,也能瞬間增加數據。AJAX提供簡單易用的方式平穩高效地創建應用程序。如果是一個桌面應用程序,LINQ提供了一種方式與XML文件和數據存儲進行交流和互動。
???
首先,我們需要做的是創建我們的XML文件。對于這個例子中,我們將使用像這樣:

<?xml?version="1.0"?encoding="utf-8"?>
<Persons>?
<Person>?
<Name>Paxton</Name>
<City>Munich</City>
<Age>29</Age>
</Person>
<Person>?
<Name>Mike</Name>
<City>Orlando</City>
<Age>33</Age>
</Person>
</Persons>

??? 我們將創建一種既讀取和寫入
XML文件:我們將需要三個Textbox和一個增加的Button,然后是另一個button和一個用于讀去的textbox。我們將構建一個這樣類似的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有一個OnClick 句柄指向一個方法。我們將這幾分鐘完成,但首先,讓我們完成我們的ASPX頁面。剩下的事兒是使頁面的AJAX生效。我們增加一個ScriptManager和一個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>
??
?? 在我們開始編碼之前,我們應該務必使用正確的名稱空間。我們將使用
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;
?

??? 現在回到Buttons,我們已經增加了一個Button的句柄,所以我們現在完成了ASPX頁面,現在可以編寫我們方法了,我們將創建一個讀去XML文件的方法,這個方法使一次或更多(你過會兒將看其它buttonClick就知道為什么了)。我們的方法寫成像這樣:

????????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文件,然后選擇文件里全部數據。一個選取,我們循環每條“record”輸出到textbox控件。我們這種方法為buttonClick的事件:

???????protected?void?butRead_Click(object?sender,?EventArgs?e)
????????{
????????????readXML();
????????????lblStatus.Text?
=?"";
????????}
?

接下來是增加數據到XML文件。這實際上需要比讀去更少的代碼量,我們將在buttonclick事件下直接編碼。就這兒一樣:

???????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語句減少錯誤處理。接著,我們使用LINQ增加數據到XML文件。當我們第一次加載文件時,然后我們簡單增加了一個新的element到父element,請看到前面提及XML結構有助于理解。

完整的code-behind是這樣的:

ContractedBlock.gifExpandedBlockStart.gifcode
using?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.";
????????}

????}
}
?

下載示例項目

?
原文:Using AJAX, LINQ and XML in C#
http://www.ajaxtutorials.com/ajax-tutorials/using-ajax-linq-and-xml-in-c/
?

另:實際上判斷字符串空可以用String.IsNullOrEmpty方法。
翻譯:
Petter ?(版權歸原作者)
http://wintersun.cnblogs.com

轉載于:https://www.cnblogs.com/wintersun/archive/2008/10/04/1303893.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276807.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276807.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1.ASP.NET Core介紹

優點&#xff1a; 1.跨平臺&#xff0c;高性能&#xff0c;開源&#xff0c;運行在.Net Core 或.Net Framework框架上&#xff08;asp.net core 3.0及以后只支持.Net Core&#xff09;。 2.各平臺上開發工具支持&#xff0c;能夠開發web應用&#xff0c;webapi&#xff0c;移動…

python3性能還低嗎_Python3 vs. Python2 大作戰,誰將是性能之王?

渲染 HTML 模板 django_html 測試將使用 Django 模板渲染引擎來構建一個 150x150 的 HTML 表格。 它利用了 Django 引擎的 Content 和 Template 類。如圖所示&#xff0c;Python 3.7 比 Python 2.7 快 1.19 倍&#xff0c;但除此之外&#xff0c;其他 Python 3 版本都沒有 Pyth…

python day08

一 文件處理補充 控制文件中光標移動 1 f.read(n): l.文件打開方式為文本模式的時,代表讀取N個字符 ll.文件打開方式為b模式時,讀取N個字節 強調:只有在read(n)模式下 N代表字符個數,除此之外的是以字節為單位 2 f.seek(): 光標移動是以字節為單位的整數移動. 三種模式:(分別為…

百度地圖移動端開發和ArcGIS for Android 開發入門

打開鏈接http://pan.baidu.com/s/1eQpFNWY&#xff0c;可以查看 轉載于:https://www.cnblogs.com/David-Young/p/3827058.html

VSCode 小雞湯 第00期 —— 安裝和入門

簡介 這將是一個新的系列&#xff0c;將會以 Visual Studio Code&#xff08;后文都簡稱為 VSCode 啦&#xff09;的操作&#xff0c;環境配置&#xff0c;插件介紹為主&#xff0c;為大家不定期的介紹 VSCode 的一些操作技巧&#xff0c;所以取名 VSCode 小雞湯&#xff0c;本…

.net生成文字圖片

System.Drawing.Bitmap bmpnew Bitmap(Bitmap.FromFile(Server.MapPath("42.jpg")));//載入圖片 System.Drawing.Graphics gGraphics.FromImage(bmp); g.DrawString("abcd測試",new Font("黑體",18),new SolidBrush(Co…

python可以調用windows資源嗎_如何在Windows上用Python調用WinRar?還有問題嗎

使用zipfile模塊&#xff0c;我創建了一個腳本來提取我的歸檔文件&#xff0c;但是這個方法會破壞除txt文件之外的所有內容。在def unzip(zip): filelist [] dumpfold rM:\SVN_EReportingZones\eReportingZones\data\input\26012012 storage rM:\SVN_EReportingZones\eRepor…

SQLServer、Mysql、Oracle 創建、刪除用戶和授予用戶權限

SQLServer 1、創建用戶 CREATE LOGIN [用戶名稱] WITH PASSWORD用戶密碼, DEFAULT_DATABASE[默認數據庫名稱], CHECK_EXPIRATIONOFF, CHECK_POLICYOFF GO USE [數據庫名稱] GO CREATE USER [用戶名稱] FOR LOGIN [用戶名稱] WITH DEFAULT_SCHEMA[dbo] GO 2、授予全庫只讀權限 A…

一次緩存性能問題排查

概述以下分享的都跳過了很多坑&#xff0c;包括redis、tomcat環境配置、機器硬件配置等等問題&#xff08;與線上保持一致&#xff0c;或者硬件性能減配系數&#xff0c;例如線上&#xff1a;8C16G&#xff0c;壓測&#xff1a;4C8G&#xff0c;系數簡單相差2倍&#xff09;&am…

python 多個列表_Python同時迭代多個列表

沒有人會記得死的東西&#xff0c;所以要活下去&#xff0c;咬牙切齒的活下去&#xff01; import sys from itertools import chain from random import randint reload(sys) sys.setdefaultencoding(utf-8) 案例一 要求&#xff1a;一個班級有10個人&#xff0c;考試語數外三…

再讀新疆系列(六)——吹拂“卡拉庫里湖”的風

一下飛機&#xff0c;導游王雪作了簡短的自我介紹&#xff0c;馬不停蹄地帶著我們經喀什市區直接向帕米爾高原的“卡拉庫里”湖走。 問午飯在哪吃&#xff1f; 答&#xff1a;“湖邊”。 “幾點能到&#xff1f;” “大約下午二點多。”媽呀&#xff0c;又經歷一次殘酷的饑餓歷…

記錄一次webpack3升級到webpack4過程

升級之前也參考了一些網上的教程。借鑒之&#xff0c;進行的自己的升級。一些版本為什么設為那個版本號也是參考別人的結果。 整體是按照先升級npm run dev&#xff1b;在升級npm run build的順序。 首先升級webpack&#xff0c;在package.json文件中將webpack版本號修改為4.8.…

linux時間修改-hwclock和date

修改系統時間date 設定日期&#xff1a;date -s 月/日/年&#xff0c;例如設定日期為2018年12月1日&#xff0c;date -s 12/01/2018&#xff08;年也可以是兩位&#xff09; 設定時間&#xff1a;date -s hh:mm:ss&#xff0c;例如設定時間為21:15:38&#xff0c;date -s 21:15…

判斷一個字符串是否為回文的遞歸算法

//編譯器&#xff1a;GCC 4.2.1 運行環境&#xff1a;Redflag Linux 6.0 Desktop //如果在VC下編譯可能要加入string和algorithm兩個頭文件并修改函數返回值類型 #include<iostream>using namespace std;int Ifhw(string s,string q,int &i){if(s[i]q[i]&&i!…

plsql如何執行存儲過程_如何理解Spark應用的執行過程

從Spark應用的提交到執行完成有很多步驟&#xff0c;為了便于理解&#xff0c;我們把應用執行的整個過程劃分為三個階段。而我們知道Spark有多種運行模式&#xff0c;不同模式下這三個階段的執行流程也不相同。本文介紹這三個階段的劃分&#xff0c;并概要介紹不同模式下各個階…

JS高級:事件冒泡和事件捕獲;

1、事件&#xff1a;瀏覽器客戶端上客戶觸發的行為成為時事件&#xff1b;所有的事件都是天生自帶的&#xff0c;不需要我們去綁定&#xff0c;只需要我們去觸發 當用戶觸發一個事件時&#xff0c;瀏覽器的所有詳細信息都存在一個叫做event的對象上&#xff0c;我們把它叫做事件…

Vue于React特性對比(三)

最近重學React&#xff0c;再次和vue做了對比。 一&#xff0c;為官方插件提供便利的第三方插件橫行 React僅僅是一個ui框架。雖然官方提供了redux&#xff0c;react-router&#xff1b;但也有第三方的redux-thunk&#xff0c;redux-saga&#xff1b;還有react-router-dom。 而…

MYsql 安裝后啟動服務1067錯誤

今天很奇怪的問題&#xff0c; 新安裝好的數據庫 啟動服務的時候就提示1067錯誤&#xff0c; 在網上找了資料是這樣說的&#xff1a;MYSQL1067錯誤這里看 *************1安裝&#xff2d;&#xff39;&#xff33;&#xff31;&#xff2c;后更改了&#xff32;&#xff2f;&am…

vc如何打開plt圖像_圖像基本操作-open cv

import cv2 import matplotlib.pyplot as plt import numpy as np %matplotlib inline img cv2.imread(revolte.jpg) img # 讀取的是array 格式 array([[[240, 243, 255],[239, 242, 255],[238, 241, 255],...,def cv_show(name,image):cv2.imshow(name,image)cv2.waitKey(0)c…

自學編程需要注意什么?

1。選合適自己的職業&#xff0c;不同的職業門檻不一樣&#xff0c;難度不一樣&#xff0c;或多或少總有差別。 笨的選JS&#xff0c;有點底子的選Java&#xff0c;半調子的選Android或者是IOS-如果這兩個職業還沒完蛋的話。 不想寫代碼的選PM和UI&#xff0c;要求不高的選QA&a…