深入了解ASP.NET中viewstate用法及其作用机制

作者:遵义麻将开发公司 阅读:29 次 发布时间:2023-07-01 00:58:53

摘要:ViewState是ASP.NET中用来保持页面状态的机制。它是一个隐藏的字段,在页面回传时包含了当前页面的状态信息,如文本框的值、复选框的状态、下拉列表的选中项等等。准确来说,ViewState不是一个单独的功能,而是一组实现Web应用程序功能的技术的集合。ViewState主要用于管理页...

ViewState是ASP.NET中用来保持页面状态的机制。它是一个隐藏的字段,在页面回传时包含了当前页面的状态信息,如文本框的值、复选框的状态、下拉列表的选中项等等。准确来说,ViewState不是一个单独的功能,而是一组实现Web应用程序功能的技术的集合。ViewState主要用于管理页面控件状态。

深入了解ASP.NET中viewstate用法及其作用机制

ViewState的作用是为了让ASP.NET应用程序能够“记住”页面上用户的选择,以便能够让服务器跟随用户的行为而改变响应的内容。这样就能够实现更加动态的用户体验。

那么,如何使用ViewState来管理控件状态呢?上述提到,ViewState是存在于页面中的隐藏字段,其实它的实现是通过使用Java Script将还原页面状态的代码存储在隐藏字段中。对于动态添加的控件,在每次页面回传时都需要重新创建,否则会丢失操作过程中用户的存储状态。当ASP.NET页面发生回传时,ViewState中存储的值就可以用于还原控件的状态。ViewState作为后端的技术,提供了解决了大多数前端实现比较难以解决的问题。

在实际的ASP.NET应用中,为了控制ViewState的大小,可以考虑使用二进制序列化。如下所示

```C#

using System;

using System.IO;

using System.Runtime.Serialization.Formatters.Binary;

using System.Web.UI;

public partial class ControlStateDemo : System.Web.UI.Page

{

private void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

MyViewState myViewState = new MyViewState();

ViewState["myViewState"] = myViewState;

}

}

protected override object LoadPageStateFromPersistenceMedium()

{

string viewState = Request.Form["__VSTATE"];

byte[] bytes = Convert.FromBase64String(viewState);

BinaryFormatter bf = new BinaryFormatter();

MemoryStream ms = new MemoryStream(bytes);

object obj = bf.Deserialize(ms);

ms.Close();

return obj;

}

protected override void SavePageStateToPersistenceMedium(object viewState)

{

BinaryFormatter bf = new BinaryFormatter();

MemoryStream ms = new MemoryStream();

bf.Serialize(ms, viewState);

byte[] bytes = ms.ToArray();

ms.Close();

string base64 = Convert.ToBase64String(bytes);

ClientScript.RegisterHiddenField("__VSTATE", base64);

}

}

serializable

public class MyViewState : ISerializable

{

private int m_Value;

public MyViewState()

{

m_Value = 100;

}

protected MyViewState(SerializationInfo info, StreamingContext context)

{

m_Value = info.GetInt32("MyValue");

}

public int Value

{

get { return m_Value; }

set { m_Value = value; }

}

public void GetObjectData(SerializationInfo info, StreamingContext context)

{

info.AddValue("MyValue", m_Value);

}

}

```

使用BinaryFormatter可以使序列化更加简单优雅,这种方式比起JSON序列化的好处在于,对于被序列化的对象格式没有实际的要求,因为就算是私有字段,它也是可以序列化的,而JSON格式是不能序列化私有字段的。在考虑序列化时可以选择DataContractSerializable和XmlSerializable,如果是服务端和客户端共享复杂的实体模型,要考虑数据移除的因素,选择DataContractSerializable。

还要注意,由于ViewState是以Base64格式提交给服务器的,因此渲染的HTML代码会变得臃肿。这是一个潜在的性能问题,尤其是在ViewState中包含大量数据的情况下。如果不需要在回传时还原控件状态,可以禁用ViewState,这是可以通过设置EnableViewState属性为false来实现的。

总之,ViewState是ASP.NET中强大的控件状态管理机制,它可以让Web应用程序更加灵活。 在实际使用中,开发人员应该了解ViewState的工作原理,可以使用ASP.NET提供的控件库,也可以通过自定义控件来进行更加灵活的管理。最重要的是,开发人员需要做好控制ViewState的数据量,以确保页面的渲染效果和Web服务器的性能。

  • 原标题:深入了解ASP.NET中viewstate用法及其作用机制

  • 本文链接:https:////zxzx/21493.html

  • 本文由深圳飞扬众网小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与飞扬众网联系删除。
  • 微信二维码

    CTAPP999

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:166-2096-5058


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部