asp.net – 什么时候应该在服务器控件上启用EnableViewState?

当在服务器控件上启用视图状态时,是否有任何指南或规则?当它不应该?

我在看这个SqlDatasource example,注意到标签控件的视图状态未启用:

<asp:Label ID="ErrorMessageLabel" EnableViewState="false" runat="server" />

为什么在标签控件上未启用EnableViewState?我知道启用视图状态带有一些开销,所以我想使用它,只有当它需要的时候。

解决方法

这里有一个好的经验法则:如果你(1)改变代码隐藏中的属性值,(2)需要知道你在后面的回发中设置了什么值,而不需要重新计算值,那么你需要使用ViewState。

例如。在我的页面标记我可能有一个Label控件指定像这样:

<asp:Label ID="TitleLabel" runat="server" Text="Update this Employee" />

然后在Page_Load事件中我有这个代码

If Not IsPostBack AndAlso myEmployeeObject.IsNew Then TitleLabel.Text = "Create a new Employee"

通过改变Text属性的值,我在ViewState中引入了一个新的元素。如果在任何后续的PostBack期间获取Label的Text属性的值,该值将是“Create a new Employee”。

这是我做什么,当我出发,以尽量减少我的页面使用的ViewState的量。我enable tracing页面上。当在浏览器中呈现时,跟踪输出添加页面底部。跟踪输出标识您的页面上的每个单一服务器控件,并包括每个控件存储多少ViewState(以字节为单位测量)。我使用这些信息来计算何时我想交换ViewState的开销重新计算值的开销。

在我的前一个示例中,我将选择重新计算每个PostBack上的Label的Text属性,并停止在ViewState中存储Text属性。这是我更新的标记的外观:

<asp:Label ID="TitleLabel" runat="server" Text="Update this Employee" EnableViewState="false" />

和我更新的Page_Load事件:

If myEmployeeObject.IsNew Then TitleLabel.Text = "Create a new Employee"

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....