【发布时间】:2015-07-06 23:02:16
【问题描述】:
我在页面 (ABC.aspx) 中以 5 到 6 个选项卡显示了一组用户控件。每个用户控件都有许多文本框、下拉菜单等。我需要检测这些用户控件中任何字段的任何用户更改,并在这些用户控件所在的父页面 (ABC.aspx) 上进行一些处理。
用户控件的实现如下。 每个用户控件都有一个 XMl 文件,该文件被读取并相应地创建控件。
ascx.cs 中的 render 方法读取此 xml 文件并相应地为该用户控件呈现 UI。
假设用户控件的示例 XMl 是
<uigroup groupname ="Schematic(Logical) Symbol Request">
<uirow>
<uicontrol displayname="Request Type" datatype="DropDown" isrequired="false" domainname="RequestType" dropdownEventHandler="OnScenarioChange(this)" key="Schematic Scenario" defaultValue="New"></uicontrol>
</uirow>
<uirow>
<uicontrol displayname="Logical Name" datatype="TextBox" isrequired="false" supportedscenarios="New,Use Existing,Update Existing" key="Schematic Symbol Name"></uicontrol>
<uicontrol displayname="Similar Symbol" datatype="TextBox" isrequired="false" supportedscenarios="New" key="Similar Schematic Symbol"></uicontrol>
</uirow>
<uirow>
<uicontrol displayname="Type of Change" datatype="DropDown" isrequired="false" domainname="Type of Schematic Change" supportedscenarios="Update Existing" key="Type of Schematic Change"></uicontrol>
<uicontrol displayname="Layout Preference" datatype="DropDown" isrequired="false" domainname="Schematic Layout Preference" supportedscenarios="New,Update Existing" key="Schematic Layout Preference"></uicontrol>
</uirow>
<uirow>
<uicontrol displayname="Justification" datatype="DropDown" isrequired="false" domainname="Schematic Justification" supportedscenarios="Update Existing" key="Schematic Justification"></uicontrol>
<uicontrol displayname="Logical Directory" datatype="DropDown" isrequired="false" domainname="ICL Logical Directory" supportedscenarios="New" key="ICL Logical Directory"></uicontrol>
</uirow>
Usercontrol.ascx.cs 有
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Page_Init(object sender, EventArgs e)
{
this.Render();
}
public void Render()
{
this.Render(this.XmlPath);
}
我的渲染函数做了以下事情
public void Render(string _filePath)
{
UITab tab = this.GetDataFromXML(_filePath);
foreach (UIGroup g in tab.Groups)
{
//Add a panel
Panel groupPanel = this.AddPanel(g);
foreach (UIRow r in g.Rows)
{
Table table = new Table();
groupPanel.Controls.Add(table);
TableRow tableRow = new TableRow();
table.Rows.Add(tableRow);
foreach (UIControl c in r.Controls)
{
switch (c.DataType)
{
case UIDataType.Textbox:
this.AddTextBox(groupPanel, c, tableRow);
break;
case UIDataType.Dropdown:
this.AddDropdown(groupPanel, c, tableRow);
break;
case UIDataType.LabelInfo:
this.AddLabelInfo(groupPanel, c,tableRow);
break;
case UIDataType.Label:
this.AddLabel(groupPanel, c,tableRow);
break;
}
}
}
}
}
我们正在以类似的方式呈现其他用户控件。我们需要找到一种方法来检测任何这些用户控件上的用户更改(如文本框更改或下拉列表更改等)并处理父页面。
我不确定 Delegates 和 Events 是否适合,如果可以,它们如何适合这种架构是我最大的问题。任何建设性的意见都会有帮助。
谢谢,
【问题讨论】: