丢失WebForm用户控件的状态

And*_*eas 3 asp.net webforms

首先,我没有使用ASP.NET WebForms的经验.但是,我继承了一个非常古老的WebForm应用程序,我不时需要进行维护.这是一种情况:

有一个具有私有实例变量的用户控件.问题是,这些实例变量的值会丢失,很可能是在页面重新加载之后.到目前为止我发现的是,似乎控制类经常被重新创建.什么是有用的,将是以下问题的答案:

  • WebForm用户控件是否保持状态?
  • 如果是的话,它是如何完成的(指向在线资源以获取详细信息)
  • 如果不是,可以以某种方式实施吗?有样品吗?

Joe*_*Joe 5

维护状态最常见的方法可能是使用ViewState而不是私有实例字段.例如,如果UserControl包含属性Text,则可以按如下方式定义:

public string Text
{
    get { return (string) ViewState["Text"]; }
    set { ViewState["Text"] = value; }
}
Run Code Online (Sandbox Code Playgroud)

您还可以将属性委派给子控件.在这种情况下,子控件将为您维护ViewState(提供的EnableViewStatetrue).例如:

public string Text
{
    get { return MyTextBox.Text; }
    set { MyTextBox.Text = value; }
}
Run Code Online (Sandbox Code Playgroud)

谷歌ViewState获取更多信息.有一些陷阱,彻底了解它是个好主意.