c# - ASP.NET 基于 ViewState 动态加载控件

标签 c# asp.net user-controls viewstate

我有一个 UserControl 可以动态创建多个 TextBox。文本框的数量取决于用户的选择。我选择将每个 TextBox 的 ID 存储在 UserControlViewState 对象中,以便它们可以在每次回传中一致地重新创建。

如果我在 Page_Init 期间重新创建动态控件(如推荐的那样),则 UserControlsViewState 尚未填充.

如果我在 Page_LoadPreLoad 期间重新创建动态控件,那么它们的回传值直到 Page_Load 事件之后才会重新水化,所以直到导致问题的页面生命周期后期,我才能访问它们的正确值。

有更好的方法吗?

最佳答案

我遇到了类似的第 22 条军规——我需要向我的页面添加动态用户控件,但它们取决于用户所做的下拉列表选择。当然,在设置 View 状态之前,下拉列表的值无法访问,但是如果我们希望用户控件通过 View 状态维护它们自己的状态,建议在 Page_Init 中创建用户控件,但那是在 View 状态存在之前,所以我无法轮询那里的下拉列表。

另一个对我有用的建议——从 Request.Form 集合中获取下拉列表的值:

protected void Page_Init(object sender, EventArgs e)
{
     //get the user's DropDownList selection
     int visualizerMode = Int32.Parse(Request.Form[ddlVisualizerMode.UniqueID]);

     //now dynamically load a usercontrol based on that value
     LoadUserControl(visualizerMode);
}

...这对我来说效果很好。这是直接使用 HTML 表单的倒退,我经常忘记这一点,因为它已经在 ASP.NET WebForms 模型中使用了很多年。

关于c# - ASP.NET 基于 ViewState 动态加载控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18739335/

相关文章:

c# - Selenium 异常 : "return not in a function"

c# - 如何正确处理临时文件?

javascript - 如何为 jQuery DataTable 设置名称

asp.net - 如何在asp页面中播放/暂停wav文件

c# - 默认值 C# 类

c# - foreach 中的 System.OutOfMemoryException 循环遍历 worsheet 行

asp.net - SQL - 两个不同长度的字符串之间的相似性

c# - 自定义通用用户控件未出现在工具箱中

WPF UserControl 设计时间大小

user-controls - DNN 5 - 无法从自定义模块中的嵌套用户控件中获取当前 ModuleId