0

在我的最后一步中,我有一个 for each 循环asp:Wizard,它应该列出每个文本框中不为空的所有文本。文本框位于第二步,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>
4

2 回答 2

2

并将它们放置在 asp:Panel

随着this.Controls您正在寻找直接存在于表单上而不是面板内的文本框。

您应该修改查询以从面板中获取控件,例如:

var requested = yourPanel.Controls.OfType<TextBox>()
                         .Where(txt => !string.IsNullOrWhiteSpace(txt.Text));

yourPanel你的身份证在哪里asp:Panel

于 2013-10-02T21:14:14.520 回答
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");
于 2013-10-02T21:38:13.680 回答