使用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下载。




841

被折叠的 条评论
为什么被折叠?



