• 工作总结
  • 工作计划
  • 心得体会
  • 述职报告
  • 事迹材料
  • 申请书
  • 作文大全
  • 读后感
  • 调查报告
  • 励志歌曲
  • 请假条
  • 创先争优
  • 毕业实习
  • 财神节
  • 高中主题
  • 小学一年
  • 名人名言
  • 财务工作
  • 小说/有
  • 承揽合同
  • 寒假计划
  • 外贸信函
  • 励志电影
  • 个人写作
  • 其它相关
  • 生活常识
  • 安全稳定
  • 心情短语
  • 爱情短信
  • 工会工作
  • 小学五年
  • 金融类工
  • 搞笑短信
  • 医务工作
  • 党团工作
  • 党校学习
  • 学习体会
  • 下半年工
  • 买卖合同
  • qq空间
  • 食品广告
  • 办公室工
  • 保险合同
  • 儿童英语
  • 软件下载
  • 广告合同
  • 服装广告
  • 学生会工
  • 文明礼仪
  • 农村工作
  • 人大政协
  • 创意广告
  • 您现在的位置:六七范文网 > 其它相关 > 正文

    ASP.NET动态网页中的数据传递技术

    来源:六七范文网 时间:2023-05-20 16:45:22 点击:

    摘要:网页的设计如今在网络中非常常见,而在各个网页间传递信息也是必不可少,该文选择了网页间传递数据的多个对象进行说明,对比分析了各个对象之间的差异和优缺点,并举例说明了各个对象的应用方法。具体应用决定了数据传递方式的选择,合理数据传递方式选择是Web页面的设计中的关键考虑因素。

    关键词:数据传递;类;序列化

    中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)22-6264-04

    Data Transfer in ASP.NET

    XING Xiao-yan, YANG Hua, LIAO Ying-mei

    (College of Computer, China West Normal University, Nanchong 637009, China)

    Abstract: The web page design is popular in Internet, and in the transmission of information between the various pages is also essential. In this paper, several objects about transmission of data between the ASP.NET pages described. It analyzed comparatively of the differences between the various objects, advantages and disadvantages, and illustrated the application of them. Specific application determines the data transfer mode of choice, reasonable choice of data transfer is the design of Web pages of the key considerations.

    Key words: data transfer; class; serialization

    随着Web技术的发展和电子商务时代的到来,人们不再满足于建立各种静态地发布信息的网站,更多的时候需要能与用户进行交互,并能提供后台数据库的管理和控制等服务的动态网站。在这种情况下,产生了很多动态网页技术,ASP.NET就是微软推出的相当优秀的一种动态网页技术。

    用户在浏览网页时将数据从一个网页传递到另一个网页,通过在不同页面间传递参数,从而实现动态页面的管理、信息传递和统计等功能。本文将说明在ASP.NET中从一个网页向另一个网页传递数据的几种方法。

    1 内置的网页数据传递对象

    在ASP.NET中,有很多种保存信息的内置对象,如:Application, Session, Cookie, ViewState和Cache等。下面分别介绍它们的用法和区别。

    Application用于保存所有用户的公共的数据信息,如果使用Application对象,一个需要考虑的问题是任何写操作都要在Application_Start事件(global.asax)中完成。尽管使用Application.Lock()和Applicaiton.Unlock()方法来避免写操作的同步,但是它串行化了对Application对象的请求,当网站访问量大的时候会产生严重的性能瓶颈,因此不适合用此对象保存大的数据集合。

    Session用于保存每个用户的专用信息。每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) 。 她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右)。Session中的信息保存在Web服务器内容中,保存的数据量可大可小。当Session超时或被关闭时将自动释放保存的数据信息。由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低。对于小量的数据,使用Session对象保存还是一个不错的选择,使用Session对象保存信息的代码如下:

    Session["name"]="yanghua"; //存放信息

    string UserName=Session["name"].ToString();//读取数据

    ViewState 是用来保存Web控件回传时状态值的,有效期等于页面的生存期,类似于HTML的隐藏控件。所有Web服务器控件都使用ViewState在页面回发期间保存自己的状态信息。如果某个控件不需要在回发期间保存状态信息,最好关闭该对象的ViewState,避免不必要的资源浪费。可在aspx页面的顶部@Page指令添加“EnableViewState=false”属性可以禁止整个页面的ViewState,或者将EnableViewState=”false”属性添加至窗体中的控件中。使用ViewState对象保存信息的代码如下。

    ViewState["name"]="yanghua"; //存放信息

    string name=ViewState["name"].ToString();//读取信息

    Cookie是服务器存储在浏览器上的少量信息,在客户端保留信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置,分为会话级和持久级。如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止,此为会话Cookie;如果设置Cookie对象的Expires属性,则创建持久性Cookie。Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4K,因此不能用来保存数据集及其他大量数据。由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全性。

    使用Cookie对象保存的代码如下:

    HttpCookie objHttpCookie = new HttpCookie(“UserName”, “yanghua"); //创建Cookie

    Response.Cookies.Add(objHttpCookie); //将新 Cookie 添加到 Response 对象的 Cookie 集合中

    Response.Write(Request.Cookies[“UserName“].Value); //读取Cookie

    Cache对象用于在HTTP请求间保存页面或数据。把访问频繁的数据以及需要大量处理时间来创建的数据存储在内存中,当用户发出相同的请求后服务器不再次处理而是将Cache中保存的信息返回给用户,节省了服务器处理请求的时间,极大地提高整个应用程序的效率。其生存期依赖于该应用程序的生存期。当重新启动应用程序时,将重新创建其Cache对象的实例。使用Cache对象保存信息的代码如下。

    Cache[“name”]=”yanghua”;//创建Cache方法一

    Cache.Insert(“name”,”yanghua”); //创建Cache方法二

    string name=Cache["name"].ToString(); //读取Cache

    除了应用程序的Cache缓存外,ASP.NET还提供了@OutputCache指令的整页缓存形式和Substitution控件的页内缓存形式。

    页面具体应用决定了数据传递方式的选择,合理数据传递方式选择是Web页面的设计中的关键考虑因素。

    2 常用的网页数据传递方法

    2.1 URL地址中的参数传递

    URL方式是实现Web间数据传递最基本的方法,操作简单,可很方便地实现不同Web页面间的数据传递,但其安全性比较差。将要传递的数据附加在网页地址(URL)后面进行传递。如:https://210.41.192.85/testweb.aspx?username=yanghua,其中?后面所跟着的字符串便是传递的数据,=前的是变量名,=后面是数值,可以使用Request对象来获取传递的数据。如:Request(“username”)。这种方法在传递数据过程中其数据内容在URL栏中是显示的,用户能看到提交的内容因此安全性不是很好,加之 由于URL的长度有一定的限制,因此不能传递太大的信息。

    例如常见的搜索引擎页面由文本框和按钮组成,可以在按钮事件中生成跳转的页面然后在目标页面显示。

    private void btnSubmit_Click(object sender,System.EventArgs e)

    {

    string strURL=””;

    strURL=”target.aspx?key=”+Server.UrlEncode(txtSearch.Text);

    Response.Redirect(strURL);

    }

    目标页面的Page_Load事件中

    Response.Write(“传递的用户名为:”+Requst.QureyString[“key”]);

    2.2 页面表单中的数据传递

    通过在网页上制作表单交互区域,用户在各个表单控件中输入数据,然后通过form提交到服务器,在提交后的接受form数据的页面里就可以接收到相应数据,即form的action页面中可以使用request对象来接收所传递的数据。

    利用form页面的文本框来接收用户数据的输入,通过submit按钮提交后在目标页面中使用Request.Form[“表单控件名”]来接收数据。

    2.3 Server.Transfer方法传递

    可以使用HttpContext从网页中重新得到数据。通过使用方法的属性获得那些数据。假设在页面WebForm中设置一个类对象的属性,假设这个属性可以返回页面文本框txtName中用户的姓名。在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面。

    public string GetName

    {

    get{return txtName.Text; }

    }

    在目标页面可以直接用如下代码接收数据传递:

    UserInfo user;

    User=(WebForm)Context.Handler;

    lblInfo.Text=user.GetName;

    而Server.Transfer方法在URL 参数指定的页面处理完后,控制权不会返回给先前的页面,也不会返回给调用此方法的页面,并且在新页面完成执行时结束。

    3 类对象的页面传递

    但随着面向对象语言的发展,目前网络中网页制作的主流技术ASP.NET、JSP等技术采用类的越来越多,在页面中传递的变量也越来越多,虽然我们可以通过form表单的形式提交。比如用户登录或注册的情况,不错,如果你的程序中只有一个用户的实例,为它单独定义一个类的确意思不大,但是实际的网站中你需要很多用户实例,这时程序中的变量传递流会变得相当复杂,你得时时保证每个用户实例指定的变量都正确的传递给了不同的函数。但是使用对象大大降低了你所传递的变量的数量,因为对象中的属性和处理函数自动的认定作用范围就限制在本对象之内,那么它所能够操作的对象也就限制在了对象范围内。而且对象的定义可以非常容易的包含到不同的脚本中,还从而保证了每一个用户在不同的脚本中工作方式都是一致的。 你可以在声明一个类的实例的同时,通过传递参数的形式为类中的某个变量指定不同的值。

    那么类对象如何在网页中传递呢?序列化这个概念很好的解决了这个问题。

    简单来说序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化(比如文件流、网络流等),我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。

    在网页中进行对象的传递可以根据需要确定需要将对象序列化成什么流。比如在点对点的聊天系统中,希望一方用户的输入可以直接在网络另一方的用户窗口中呈现,就可以将用户输入的信息进行序列化,序列化到二进制网络流中去,在另一端,取出二进制流并反序列化成对象,然后显示在界面上。 而对于用户一些需要在多个页面传递或者保存的信息,可以序列化保存到文件或数据库表中,然后在需要使用的时候,取出文件或字段中的信息反序列化成对象就可以了。

    .NET框架提供两种格式的序列化,二进制序列化(Binary Serialization)和XML序列化(XML Serialization),其中XML序列化又包括SoapFormatter、XmlSerializer。

    当要将一个类的实例对象进行序列化分解之前,首先必须要确认这个类是否可以进行序列化分解,一个类通常通过属性 [Serializable] 将其标注为可序列化(XmlSerializer方法可以不标注而直接序列化),换句话说,可以依据所要序列化分解的格式,使用上面任一个类对标注为 [Serializable] 的类实例对象进行序列化分解。比如我们如下定义一个可以序列化的类对象:

    [Serializable]

    public class User

    {

    public string userName;

    public string userPwd;

    }

    将此类的实例序列化成一个Xml文件.

    User user = new User();

    XmlSerializer ser = new XmlSerializer(user.GetType());

    ser.Serialize(new FileStream(@"users.xml", FileMode.Create), user);

    反序列化:

    XmlSerializer serializer = new XmlSerializer(Type.GetType("MyObject"));

    MyObject my=(MyObject)serializer.Deserialize(new FileStream(@"users.xml",FileMode.Open));

    如果需要保存成文件的情况可以由下面的序列化方法和反序列化方法将对象序列化

    public string SerializeObject(Object WriteObject)

    {

    string strTemp;

    try

    {

    fs = new System.IO.FileStream(tempFilePath, FileMode.Create);

    //序列化对象进文件

    myFormat = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

    myFormat.Serialize(fs, WriteObject);

    fs.Close();

    //读取文件里面的字符串

    fs = new FileStream(tempFilePath, FileMode.Open);

    sr= new StreamReader(fs);

    strTemp = sr.ReadToEnd();

    sr.Close();

    fs.Close();

    }

    catch (Exception e)

    {

    return null;

    }

    return strTemp;

    }

    public Object dsSerializeObject(string strTemp)

    {

    Object objTemp;

    myFormat = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

    try

    {

    fs = new FileStream(tempFilePath, FileMode.Create);

    sw = new StreamWriter(fs);

    sw.Write(strTemp);

    sw.Close();

    fs.Close();

    fs = new FileStream(tempFilePath, FileMode.Open);

    objTemp = myFormat.Deserialize(fs);

    fs.Close();

    }

    catch(Exception e)

    {

    return null;

    }

    return objTemp;

    }

    因为用户登录是大部分网页确认用户状态的常用手段,因此采用序列化进行类对象的传递在网页数据传递中是非常常用的。当然还可以在User类中设置更多属性。

    要序列化对象,首先创建要序列化的对象并设置它的公共属性和字段。为此,必须确定要用以存储 XML 流的传输格式(或者作为流,或者作为文件 )。

    4 结论

    上述介绍的是网页间数据传递的常用方法,各有千秋。其中URL方式和form方式实现方法简单,可实现网页间的简单数据传递,但必须是连续访问两页面间数据传递;而Session安全性较高,且多个页面间均可传递;但序列化形式的列对象传递却会是今后复杂数据传递中最好的选择。

    参考文献:

    [1] 陈向东.基于ASP.NET的网络数据传输[J].电脑知识与技术,2008,4(7):1861-1862,1864.

    [2] Evjen B..ASP.NET 2.0高级编程(特别版)[M].杨亚,译.清华大学出版社,2007.

    [3] Microsoft Corporation.MSDN Library for Visual Studio 2005[EB].

    推荐访问:动态网页 传递 数据 技术 ASP