在 TemplatedWizardStep 中查找控件
Finding a control in TemplatedWizardStep
我正在制作一个包含用于用户输入的组合框的向导控件。我正在使用 TemplatedWizardStep
来控制 appea运行ce 和导航。我了解到在这样的步骤中访问控件需要使用 FindControl(id)
.
我的向导基本上是这样的,去掉了很多格式:
<asp:Wizard id="wizEntry" runat="server" >
<WizardSteps>
<asp:TemplatedWizardStep id="stepFoo" Title="Foo" runat="server" >
<table id="TableFoo" runat="server" >
<tr id="Row1">
<td id="Row1Cell1">
<asp:DropDownList id="DDListBar" runat="server" ></asp:DropDownList>
</td></tr></table></asp:TemplatedWizardStep></WizardSteps></asp:Wizard>
我想在向导 wiz
中获取 DDListBar
的选定值。我的研究表明,我应该在向导上调用 FindControl
来获取步骤,然后在步骤上调用来获取控件。我的代码:
DropDownList ddlBar = null;
bar = (DropDownList)wizEntry.FindControl("stepFoo").FindControl("DDListBar");
当我运行这个的时候,bar
回来了null
。所以我将调用拆分为 FindControl
。我确定正确找到了向导步骤,但没有找到组合框。事实上,向导步骤中唯一的控件是 table.
我希望有一个我没有学到的简单解决方案,而不是针对嵌套控件层次结构中每个级别的 FindControl。
(遗留代码使用每行一个组合框的长 table。C# 代码文件直接通过 ID 引用这些组合框。但是 table 太长,客户想要一个向导将数据条目分解成小单元。)
编辑 1:This answer 目前对我的研究很有帮助。
由于DDListBar嵌套在TableFoo服务器控件中,您需要递归地找到它。
这是一个辅助方法。它以递归方式搜索任何控件。
辅助方法
public static Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
return root;
return root.Controls.Cast<Control>()
.Select(c => FindControlRecursive(c, id))
.FirstOrDefault(c => c != null);
}
用法
var ddListBar = (DropDownList)FindControlRecursive(wizEntry, "DDListBar");
我正在制作一个包含用于用户输入的组合框的向导控件。我正在使用 TemplatedWizardStep
来控制 appea运行ce 和导航。我了解到在这样的步骤中访问控件需要使用 FindControl(id)
.
我的向导基本上是这样的,去掉了很多格式:
<asp:Wizard id="wizEntry" runat="server" >
<WizardSteps>
<asp:TemplatedWizardStep id="stepFoo" Title="Foo" runat="server" >
<table id="TableFoo" runat="server" >
<tr id="Row1">
<td id="Row1Cell1">
<asp:DropDownList id="DDListBar" runat="server" ></asp:DropDownList>
</td></tr></table></asp:TemplatedWizardStep></WizardSteps></asp:Wizard>
我想在向导 wiz
中获取 DDListBar
的选定值。我的研究表明,我应该在向导上调用 FindControl
来获取步骤,然后在步骤上调用来获取控件。我的代码:
DropDownList ddlBar = null;
bar = (DropDownList)wizEntry.FindControl("stepFoo").FindControl("DDListBar");
当我运行这个的时候,bar
回来了null
。所以我将调用拆分为 FindControl
。我确定正确找到了向导步骤,但没有找到组合框。事实上,向导步骤中唯一的控件是 table.
我希望有一个我没有学到的简单解决方案,而不是针对嵌套控件层次结构中每个级别的 FindControl。
(遗留代码使用每行一个组合框的长 table。C# 代码文件直接通过 ID 引用这些组合框。但是 table 太长,客户想要一个向导将数据条目分解成小单元。)
编辑 1:This answer 目前对我的研究很有帮助。
由于DDListBar嵌套在TableFoo服务器控件中,您需要递归地找到它。
这是一个辅助方法。它以递归方式搜索任何控件。
辅助方法
public static Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
return root;
return root.Controls.Cast<Control>()
.Select(c => FindControlRecursive(c, id))
.FirstOrDefault(c => c != null);
}
用法
var ddListBar = (DropDownList)FindControlRecursive(wizEntry, "DDListBar");