使用XML在不同的web页面见实现通信

使用XML在不同的web间传输数据

ASP.NET中,不同的页面是属于不同的线程,线程之间的通信一直是web中的一个重大问题,目前使用比较多的是get()post()方法,但最终还是通过传输一个比较大的字符串来实现。

ASP.NET的页面上,有这么几类的控件:标准控件和HTML控件,但是使用HTML控件,在后台的逻辑代码中不能识别到,同时,在设计界面的HTML的脚步也无法读取后台逻辑代码中的数据,这样,就给设计页面和逻辑后台之间的数据传输造成了一个壁垒。

但是,如果我们使用一个第三方的控件或平台,使HTML控件以及后台的逻辑代码都能访问到,这个问题就解决了,比如采用数据库,或者是XML文件。数据库比较大,而且HTML的脚步中也不能直接操作数据库,因此,使用XML是一个比较理想的选择。

XML即可扩展标记语言(eXtensible Markup Language),是一种数据的描述语言,XML可作为微型数据库,信息传递的载体,应用程序的配置信息数据等。

下面,我们就来看看,如何在ASP.NET网站中使用XML并传输数据。

我的开发环境是VS2008,首先建立一个ASP.NET的网站,在Default.aspx页面下添加如下几个HTML控件:

<div>    

        姓名:<input id="txtName" type="text" /><br />

        性别:<input id="txtSex" type="text" /><br />

        年龄:<input id="txtAge" type="text" /><br />

        <input id="btnSumbit" type="button" value="提交" onclick="return btnSumbit_onclick()" />

        </div>

主要是用来测试数据,页面的效果如下所示:

 

页面效果图

此外,还需要一个XML文件,作为一个第三方控件,用来存储我们的测试数据。

这个XML文件比较简单,只有一个简单的学生信息,名称为student.xml,如下:

<?xml version="1.0"?>

<student>

<name>张三</name>

<sex></sex>

<age>15</age>

</student>

我们要通过HTML的控件来进行数据传输,在按钮的click事件中,定义如下的函数:

<script language="javascript" type="text/javascript">

// <!CDATA[

//提交按钮

        function btnSumbit_onclick() {

            var name = document.getElementById("txtName").value;

            var sex = document.getElementById("txtSex").value;

            var age = document.getElementById("txtAge").value;

            

            alterStudent(name, sex, age );

        }

//数据传输

        function GIS_HttpPostService(strUrl, xmlString) {

            var objHttp, xmlSend;

            xmlSend = new ActiveXObject("Microsoft.XMLDOM");

            GIS_xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

            xmlSend.loadXML(xmlString);

            GIS_xmlHttp.Open("Post", strUrl, true);

            GIS_xmlHttp.Send(xmlSend);

        }

//更新学生信息

        function alterStudent(name, sex, age) {

            var theStudent, theElem, root;

            var xmldoc = new ActiveXObject("MSXML2.DOMDOCUMENT.3.0");

            xmldoc.async = false;

 

            xmldoc.load("student.xml");

            root = xmldoc.documentElement;

            alert(xmldoc.xml);

 

            theStudent = root.selectSingleNode("/student");

            theStudent.childNodes[0].text = name;

 

            theStudent = root.selectSingleNode("/student");

            theStudent.childNodes[1].text = sex;

 

            theStudent = root.selectSingleNode("/student");

            theStudent.childNodes[2].text = age;

            

            alert(xmldoc.xml);

            var str = "";

            str += xmldoc.xml;

            var str2 = "student.aspx";

            GIS_HttpPostService(str2, str);

        }

// ]]>

    </script>

既然是不同线程间的数据通信,就需要另一个页面来做测试,我们添加一个新的页面,命名为student.aspx,在页面的page_Load()中,添加如下的代码:

protected void Page_Load(object sender, EventArgs e)

    {

        try

        {

            byte[] by = Request.BinaryRead(Request.TotalBytes);

            string filename = System.Web.HttpContext.Current.Server.MapPath("~/student.xml");

            DeleteFile(filename);

            FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate);

            fileStream.Write(by, 0, by.Length);

            fileStream.Flush();

            fileStream.Close();

        }

        catch (Exception ex)

        {

            MessageBox.Show(ex.Message);

        }

    }

/// <summary>

    /// 如果XML文件存在,则删除文件

    /// </summary>

    /// <param name="FilePath">文件路径</param>

/// <returns>删除成功与否</returns>    

public static bool DeleteFile(string FilePath)

    {

        try

        {

 

            if (System.IO.File.Exists(FilePath))

            {

                System.IO.File.Delete(FilePath);

                if (System.IO.File.Exists(FilePath))

                {

                    return false;

                }

                else

                {

                    return true;

                }

            }

            else

                return true;

        }

        catch

        {

            return false;

        }

    }

好了,至此,我们所有的工作都昨晚了,看看测试的结果怎样~~

首先是允许界面,输入测试的信息,点击提交,首先会显示原来的XML文件中的内容,如图:

 

点击确定,则对XML文件进行更新,如图:

最后,看更新后的XML文件内容如下:

<?xml version="1.0"?>

<student>

<name>苏庆贺</name>

<sex></sex>

<age>23</age>

</student>

如此,则说明数据传输成功。接下来,我们就能在后台的逻辑代码中,通过读取XML文件,获取所需的数据。

以上是关于使用XML在不同的网页直接实现前台HTML控件和后台进行数据通信问题的全部介绍,当然,或许还会有更多,更好的办法来实现,等以后实现了,再与大家交流。

整个项目的解决方案,可以到http://download.csdn.net/source/3175516下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值