HyperLink上的EnableViewState具有什么功能?HyperLink上的EnableViewState的功能是什么意思?
<asp:HyperLink ID="RegisterHyperLink" runat="server" EnableViewState="false">Register</asp:HyperLink>
这是什么意思?如果我将它设置为true,它会做什么。谢谢!我查了一下,但定义并不简单。
HyperLink上的EnableViewState具有什么功能?HyperLink上的EnableViewState的功能是什么意思?
<asp:HyperLink ID="RegisterHyperLink" runat="server" EnableViewState="false">Register</asp:HyperLink>
这是什么意思?如果我将它设置为true,它会做什么。谢谢!我查了一下,但定义并不简单。
ViewState用于在回发期间保持控件属性的状态。禁用它意味着您以编程方式设置的任何属性(在代码隐藏中)将不会在页面回发中持久化。但是,如果声明所有值(在.aspx页面中),那么禁用它并不会产生任何影响。
一个简单的例子:
说你有这样的ASPX标记了ViewState中启用:
<form id="form1" runat="server">
<div>
<asp:HyperLink ID="RegisterHyperLink" runat="server" EnableViewState="true">Register</asp:HyperLink>
<br /><br />
<asp:Button ID="ButtonPostBack" runat="server" Text="Post Back" />
</div>
</form>
你在代码隐藏做到这一点:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
RegisterHyperLink.ForeColor = System.Drawing.Color.Red;
}
}
即使你仅在第一次加载时将HyperLink的ForeColor设置为红色,HyperLink在单击执行回发的按钮后仍然保持红色。这是因为ViewState存储HyperLinks属性的值,并在回发后重新创建它们。
如果您尝试完全相同的事情,但在HyperLink上禁用了ViewState,当您单击提交按钮时,HyperLink将恢复为其原始颜色。这是因为视图状态不是“存储”您将其设置为红色的事实。
在实际应用中可以正常禁用ViewState的,如果:
A)你的页面不执行任何回发 B)您可以设置所有属性声明
如果你真的想了解我的ViewState” d推荐阅读TRULY Understanding ViewState。
这意味着您可以在页面请求期间(即在代码后面而不是控件模板声明中的属性)设置NavigateUrl
属性,该属性将在后续回发中保留。如果您禁用EnableViewState
属性,请指定NavigateUrl
,然后在以下回发请求中,NavigateUrl
属性将不起作用。
我相信这也适用于控件的其他属性,如Text
,Target
和ImageUrl
。
默认值是true
。页面的属性先行,并将覆盖任何子控件上的属性。
不错的链接!我会与同事分享。 – Rabid 2010-08-05 19:32:18
非常好的解释,也OP应该标记这是一个被接受的答案。 – Justin 2010-08-05 19:47:24
您忘记了选项C,即只需从If块外部移动该代码即可在每次回发中设置值。 – 2010-08-05 21:13:12