一个简单的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是这样的:

code
 

下载示例项目

 
原文: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

你可能感兴趣的:(Ajax)