HyperLink上的EnableViewState做什么或意味着什么?
<asp:HyperLink ID="RegisterHyperLink" runat="server" EnableViewState="false">Register</asp:HyperLink>
这是什么意思?如果我把它设置为真,它会怎么做谢谢!我查了一下,但定义并不简单。
答案 0 :(得分:4)
ViewState用于在回发之间保持控件属性的状态。禁用它意味着您以编程方式设置的任何属性(在代码隐藏中)将不会在页面回发中保留。但是,如果您以声明方式声明所有值(在.aspx页面中),那么禁用它将不会有任何区别。
一个简单的例子:
假设您在启用ViewState的情况下启用了此aspx标记:
<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设置为红色,但在单击执行回发的Button后,HyperLink仍将保持红色。这是因为ViewState存储了HyperLinks属性的值,并在回发后重新创建它们。
如果你尝试完全相同但在HyperLink上禁用了ViewState,当你单击提交按钮时,HyperLink将恢复为原始颜色。这是因为viewstate没有“存储”你将它设置为红色的事实。
实际上,如果出现以下情况,通常可以禁用ViewState:
A)您的页面不执行任何回发 B)以声明方式设置所有属性
如果您真的想了解ViewState,我建议您阅读TRULY Understanding ViewState。
答案 1 :(得分:1)
这意味着您可以在页面请求期间设置NavigateUrl
属性(即在代码后面,而不是作为控件模板声明的属性),该属性将在后续回发中保留。如果您禁用EnableViewState
属性,请指定NavigateUrl
,然后在以下回发请求中,NavigateUrl
属性将不执行任何操作。
我相信这也适用于控件的其他属性,例如Text
,Target
和ImageUrl
。
默认值为true
。 Page的EnableViewState
属性先于并且将覆盖任何子控件的属性。