充分利用子控件编程的数据加载
-
27-09-2019 - |
题
我创建2个控制操纵的数据对象:1.用于查看和另一个用于编辑
在一个页I加载“视图” UserControl
和数据传递到它是这样的:
ViewControl control = (ViewControl)LoadControl("ViewControl.ascx");
control.dataToView = dataObject;
this.container.Controls.Add(control);
这是所有精细和控制内部我可以抓住该数据并显示它。
现在我试图按照修改了类似的做法。我有不同的用户控制该(有一些文本框用于编辑),其余传递原始数据的方式我为视图相同的:
EditControl control = (EditControl)LoadControl("EditControl.ascx");
control.dataToEdit = dataObject;
this.container.Controls.Add(control);
其中也能正常工作。
现在的问题是越来越此数据。当用户点击一个按钮,我需要获取已编辑的数据和做的东西吧。 发生了什么事是,由于控制被编程添加,数据更改的用户似乎并没有被访问的任何地方。
是否有一个解决方案?或者是试图让事情这样分隔,也可能重复使用的不可能?
预先感谢。
解决方案 3
下面是我的解决方案:
在该页面,我保持到被编程加载的控制的基准。 在控制我创建的返回与由用户输入的数据的对象的getData()方法。 当用户提交的形式中,页面调用以访问用户输入的数据控制的getData()方法
其他提示
只要保持于控制作为在网页的代码隐藏的变量的参照。即。
private EditControl control;
protected void Page_Init(object sender, EventArgs e)
{
control = (EditControl)LoadControl("EditControl.ascx");
control.dataToEdit = dataObject;
this.container.Controls.Add(control);
}
protected void Button_Click(object sender, EventArgs e)
{
var dataToEdit = control.dataToEdit;
}
只要你创建的页面生命周期的右侧部分的控制(初始化),然后ViewState
将保持不变。我假设dataToEdit只是一个TextBox
什么?
动态创建的控件必须在页面上Init
或PreInit
事件被添加。
您要在这里做,因为控制状态尚未加载。如果添加控件后都会有他们清空,因为页面已经在页面生命周期的早期充满控制页面的值。
有关页面生命周期的更多信息这里
不隶属于 StackOverflow