0

asp:Wizardnull ではない各テキストボックス内のすべてのテキストをリストすることになっているmy の最後のステップに for each ループがあります。テキストボックスは の 2 番目のステップにあり、同じステップのチェックボックスを使用して表示または非表示にされるコントロールに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>
4

2 に答える 2

2

そしてそれらは asp:Panel に配置されます

this.Controlsパネル内ではなく、フォーム上に直接存在する TextBox を探しています。

次のようなパネルからコントロールを取得するには、クエリを変更する必要があります。

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

あなたのIDはどこ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 に答える