C# 调用事件处理程序动态
本文关键字:动态 程序 事件处理 调用 | 更新日期: 2023-09-27 18:36:05
我正在尝试使用序列化的字典(controlId - string,controlValue - string)保存一个WebForm中的所有控件。接下来,我想反序列化该字典,并用控件的值动态填充控件。
问题是我的一些控件具有自动回发 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 个控件。我想添加/编辑一组数据。我尽量避免数据库中每个控件都有列的表,这就是我想使用序列化的原因。
在我看来,
你正在尝试重新发明一个轮子。 ASP.NET 提供了 WebUserControl 类,该类可以在不同的页面上使用,并用作一组控件的容器。 您可以为这些控件定义事件处理程序,无论您在哪个页面上使用它们,都将正确调用它们。
因此,我建议您使用基于 WebUserControl 的方法,而无需序列化/反序列化控件。 这是一个简单有效的解决方案。
我后来发现了它...我正在寻找:
if (((文本框)c)。AutoPostBack) (c as IPostBackDataHandler).RaisePostDataChangedEvent();