在我的asp:Wizard的最后一步中,我有一个for每个循环,它应该列出每个文本框中不为空的所有文本。textboxes位于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();
}如果我使用循环运行应用程序,我的标签将返回空白,不管我填写了什么。标签目前正处于第三步。
<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>发布于 2013-10-02 21:14:14
它们被放置在asp:面板中。
使用this.Controls,您将查找直接存在于窗体上的TextBoxes,而不是面板中的表单。
您应该修改查询以从面板获取控件,如下所示:
var requested = yourPanel.Controls.OfType<TextBox>()
.Where(txt => !string.IsNullOrWhiteSpace(txt.Text));其中yourPanel是asp:Panel的id
发布于 2013-10-02 21:38:13
如果控件嵌套在其他控件中,则希望递归地查找该控件。下面是帮助方法。
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");https://stackoverflow.com/questions/19146896
复制相似问题