【发布时间】:2009-08-11 23:52:52
【问题描述】:
我遇到了一个关于在 asp.net 应用程序中动态加载控件的奇怪问题。
所以有一个控件,用户必须选择一些项目和/或进行一些文本输入(文本框)。该控件依赖于单个下拉列表元素。
所以用户 A 在这个下拉列表“controlselector”中选择某个值 -> 将加载许多控件。之后用户点击保存,然后它应该将其保存到数据库中。
问题在于并非每个项目都保存到数据库中。
我在每次 Page_Load 时创建并重新创建控件,我已在“controlselector”上重新打开自动发布,但控件正在 page_load 事件中加载。当试图保存元素是空的,但不是每个项目:(
MyCustomControl:
FillElements(someParameter)
{
//fill some lists, dropdowns, checkboxes or whatever with some values from db
}
Foo Save()
{
//Save selected input(also some textboxes)
//and return an object
return foo;
}
Page:
Page_Load()
{
PlaceHolder.Clear();
//with Createpath the path to the control is created and loaded
PlaceHolder.Controls.Add(LoadControl(CreatePath(Selector.SelectedValue)));
//some methods are started to fill some lists in the control
((MyCustomControl)PlaceHolder.Controls[0]).FillElements(someParameter);
}
Save_Button_Click()
{
var myFoo = ((MyCustomControl)PlaceHolder.Controls[0]).Save();
myFoo.DoSomethingElse();
}
似乎有时页面会记住值,有时却不记得……一切都很奇怪
谢谢
[编辑] 我看到的问题是,有 2 次动态填充动作。 1.) 决定哪个然后加载自定义控件 2.) 用参数填充自定义控件
【问题讨论】:
-
您是否在 UserControl 中的所有控件上启用了视图状态?是否在页面的其余部分和整个 UserControl 本身上启用了 ViewState?
-
是的,我在用户控件上启用了视图状态...