HyperLink上的EnableViewState做什么或意味着什么?

时间:2010-08-05 18:38:05

标签: c# asp.net

HyperLink上的EnableViewState做什么或意味着什么?

<asp:HyperLink ID="RegisterHyperLink" runat="server" EnableViewState="false">Register</asp:HyperLink>

这是什么意思?如果我把它设置为真,它会怎么做谢谢!我查了一下,但定义并不简单。

2 个答案:

答案 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属性将不执行任何操作。

我相信这也适用于控件的其他属性,例如TextTargetImageUrl

默认值为true。 Page的EnableViewState属性先于并且将覆盖任何子控件的属性。