我在asp:Wizard
的最后一步中有一个for循环,它应该列出每个文本框中非空的所有文本。文本框位于asp:Wizard
的第二步,它们被放置在asp:Panel
个控件中,这些控件在同一步骤中使用复选框可见或不可见。这是循环事件:
protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
{
var requested = this.Controls.OfType<TextBox>()
.Where(txt => !string.IsNullOrWhiteSpace(txt.Text));
var sb = new StringBuilder();
foreach (var textBox in requested)
{
sb.Append(textBox.Text); //Add the text not the textbox
sb.Append("</br>"); //Add a line break to make it look pretty
}
Label1.Text = sb.ToString();
}
如果我使用循环运行应用程序,无论我填写什么,我的标签都将返回空白。该标签目前处于第3步
<asp:WizardStep ID="WizardStep3" runat="server" AllowReturn="false" Title="Step 3" StepType="Complete">
<asp:Label ID="Label1" runat="server" Text="This text will display when I run the application without the foreach loop"></asp:Label>
</asp:WizardStep>
答案 0 :(得分:2)
并将它们放在asp:Panel
中
使用this.Controls
您正在寻找直接存在于不在面板内的表单上的TextBox。
您应修改查询以从面板获取控件,如:
var requested = yourPanel.Controls.OfType<TextBox>()
.Where(txt => !string.IsNullOrWhiteSpace(txt.Text));
其中yourPanel
是您asp:Panel
答案 1 :(得分:1)
如果控件嵌套在其他控件中,则希望以递归方式查找控件。这是辅助方法。
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 testbox = FindControlRecursive(Page, "NameOfTextBox");