我正在尝试使用序列化的Dictionary(controlId - string,controlValue - string)保存来自一个WebForm的所有控件。接下来,我想反序列化该Dictionary并使用它们的值动态填充控件。
问题是我的一些控件有AutoPostBack为true以及事件处理程序。 有没有办法动态调用这些事件处理程序?我想通过控件的id来避免另一个切换。
例如:
foreach (KeyValuePair<string, string> kvp in dict)
{
Control c = findControlRecursive(Page, kvp.Key);
if (c != null)
{
switch (c.GetType().Name)
{
case "TextBox":
((TextBox)c).Text = kvp.Value;
if (((TextBox)c).AutoPostBack) .......
编辑:
假设我有10种不同的形式。每个都有大约50个控件。我想添加/编辑一组数据。我试图避免使用每个控件的列数据库中的表,这就是我想使用序列化的原因。
答案 0 :(得分:1)
从我的观点来看,你正试图重新发明一个轮子。 ASP.NET提供了WebUserControl类,可以在不同的页面上使用它,并作为一组控件的容器。您可以为这些控件定义事件处理程序,无论您使用它们的页面如何,都将对它们进行适当调用。
因此,我建议您使用基于WebUserControl的方法,而不必序列化/反序列化控件。这是一个简单有效的解决方案。
答案 1 :(得分:0)
我后来发现了......我一直在寻找:
if(((TextBox)c).AutoPostBack)(c as IPostBackDataHandler).RaisePostDataChangedEvent();