0

我有一个 Web 应用程序,它有大约 50 个或更多字段被分成几个面板,我asp:wizard在几个步骤中使用它们。在表单的末尾,我想根据用户的要求创建一个“这是您要求的 Label1.text ....”,而无需重新创建多个标签并将每个框的文本手动绑定到标签。这是我尝试调用表单中不为空的文本框列表的尝试,但由于感叹号而引发异常。

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

    foreach (var textBox in requested)
    {
        Response.Write(requested);
    }
4

3 回答 3

4

这是因为这是无效的语法 - 你想调用string.IsNullOrWhiteSpace并反转结果:

.Where(txt => !string.IsNullOrWhiteSpace(txt.Text))

目前你已经!在方法调用的中间,这是错误的。

(然后请注意,当前您正在尝试写出文本框本身 - 我怀疑您不想这样做。但是当您克服语法错误时,您会发现这一点。)

于 2013-10-02T18:57:12.943 回答
1

您需要使用!string.IsNullOrWhiteSpace(txt.Text)而不是string.!IsNullOrWhiteSpace(txt.Text)

string.!IsNullOrWhiteSpace(txt.Text)是无效的语法,因此您收到编译错误

于 2013-10-02T18:56:55.080 回答
1

你在正确的轨道上。我不会使用 Response.Write(可能会变得混乱),而是使用单个标签控件。让我们调用 lblResult。

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
}
lblResult.Text = sb.ToString();

请注意使用 StringBuilder 来构建我们的结果字符串以提高性能。

您还需要根据其他答案修复您的 Where 子句:

Where(txt => !string.IsNullOrWhiteSpace(txt.Text))
于 2013-10-02T18:59:32.183 回答