• 一个简单的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

  • 相关阅读:
    Cg:访问OpenGL的状态
    C++ Exception Handling
    C语言的调用规约(Calling Convension)之参数传递和返回值
    Why is FBX readonly in animation editor when imported?
    如何在Visual Studio中编译wxWidgets
    ICU字符集编码转换一例
    VisTools
    关于数值分析和LCP问题的一些开源项目
    C++: The Case Against Global Variables
    老男孩筷子兄弟
  • 原文地址:https://www.cnblogs.com/wintersun/p/1303893.html
Copyright © 2020-2023  润新知