【问题标题】:Viewstate and custom controls in asp.netasp.net 中的视图状态和自定义控件
【发布时间】:2012-01-26 14:45:23
【问题描述】:

我对 asp.net 中的视图状态和自定义控件有疑问。

假设我有一个页面和一个简单的复合控件。我知道在复合控件中,我必须在 Page.OnInit 上加载所有子控件,以便可以应用它们的视图状态并为 OnLoad 做好准备。

现在假设我在页面上有一个树,并且基于所选节点我想加载某个自定义控件。树视图的 selectedNode 在 OnInit 期间不可用,但在 OnLoad 及之后可用。我也知道,如果我在页面的 OnLoad 上添加自定义控件,则自定义控件的循环仍将从 OnInit 开始,然后到 OnLoad 等。

所以我的问题是,如果自定义控件的 OnInit 仍在调用,即使我在父级的 OnLoad 方法中加载此控件,为什么不为自定义控件填充视图状态?

是否因为父级包含子级的视图状态,如果我从父级的 OnLoad 加载子级,则视图状态不可用?

如果您遇到我上面描述的情况(使用树视图),您通常如何加载自定义控件?

【问题讨论】:

  • 你不能把问题分成几段吗?
  • 听起来对我来说是正确的。您是否已验证回发前后的控制树是否相同?

标签: c# asp.net .net


【解决方案1】:

ASP.NET 为子控件加载视图状态,即使它们已添加到 OnLoad 中的页面,如此示例所示:

protected override void OnLoad(EventArgs e)
{
    Literal literal = new Literal();
    this.placeHolder.Controls.Add(literal);
    if (!this.IsPostBack)
        literal.Text = "I'm still here after a postback.";
}

请注意,默认情况下,ASP.NET 根据子控件的索引加载视图状态,因此请确保控件的顺序从一个回发到下一个是一致的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多