【问题标题】:how do I save custom user control viewstate during postback?如何在回发期间保存自定义用户控件视图状态?
【发布时间】:2011-10-25 05:35:40
【问题描述】:

我编写了用户控件 InputDetails,其中包含几个文本框和几个单选框。

我在 Page_Load 期间动态添加它:

if(!Page.IsPostBack()){
  InputDetails input = (InputDetails)Page.LoadControl("InputDetails.ascx");
  PlaceHolder1.Controls.Add(input);
}

但是当我刷新页面时,控件不见了,所以我问,如何将用户控件保存在已添加的视图状态中,以便下次自动重新加载。更好的是,当页面回发时,我如何读取用户控件文本框中的值?我需要能够在单个页面上添加多个 InputDetails,以便保存它会很有用。

【问题讨论】:

  • 正如 Lucas 所提到的,删除 Postback-Check 即可。必须在每次回发时重新创建动态创建的控件。如果您不手动更改控件的 ID,ASP.NET 将自动从 ViewState 恢复值(如 TextBox.Text)。

标签: c# asp.net viewstate


【解决方案1】:

如果您将控件动态添加到页面,则必须在每次回发后重新创建它。 尝试删除 if (Page.IsPostBack()) 行并检查它是否有效:)。 对于您创建的每个控件,您还应该在每次创建它时设置相同的 ID 值。 如果没有其他问题,ViewState 应该能够跨回发保存控件的状态。

为了读取这些值,您可以:

【讨论】:

    【解决方案2】:

    您也可以使用 AJAX 动态加载用户控件/服务器控件,并且视图状态需要控件 ID 才能正确存储视图状态。

    请您通过此链接查看more info

    【讨论】:

    • ASP.NET 将保留 ViewState 以进行动态控制,即使您没有明确分配 ID,因为 ID 将根据控件在其父容器(本例中为 PLaceHolder)中的位置创建。此外,AJAX与这个问题无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 2011-10-17
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多