我创建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什么?

动态创建的控件必须在页面上InitPreInit事件被添加。

您要在这里做,因为控制状态尚未加载。如果添加控件后都会有他们清空,因为页面已经在页面生命周期的早期充满控制页面的值。

有关页面生命周期的更多信息这里

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top