我有一个关于asp.net应用程序中动态加载控件的奇怪问题。
因此,有一个控件,用户必须选择一些项目和/或做一些文本输入(文本框)。控件取决于单个下拉列表元素。
因此,用户A在此下拉列表“controlselector”中选择某个值 - >将加载许多控件。之后,用户单击“保存”,然后将其保存到数据库中。
问题在于并非所有项目都保存在数据库中。
我在每个Page_Load创建并重新创建控件,我已经在“controlselector”上重新启动了autopost,但控件正在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.)使用参数
填充自定义控件答案 0 :(得分:3)
Page_Load在生命周期中为时已晚,无法创建动态控件,因为在加载事件之前,状态将恢复为控件。这意味着您需要提前创建控件,否则ASP.Net将无法在恢复状态时看到它。尝试在Init事件中创建它们。或者,更好的是,尝试以下选项之一:
Visible
为真。答案 1 :(得分:0)
如果您不想重新创建这些控件,则需要检查“IsPostBack”...它会杀死您拥有的值等。
尝试将代码更改为此类代码。
Page_Load()
{
if(IsPostBack == false){
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);
}
}
答案 2 :(得分:0)
感谢您的帮助,但问题出在完全不同的地方 动态加载到动态加载的下拉列表中的项目有一些“\ n”特殊字符,但不是每个项目 这就是为什么不是每件物品都丢失了几个
我不知道我是否应该/可以将此标记为答案,因为问题出在其他地方