【问题标题】:Text box validation not working文本框验证不起作用
【发布时间】:2011-12-28 04:51:08
【问题描述】:

现在下面的代码测试一个空白文本框。如果为空,则返回 if 语句下方所述的错误。这很好用,但我也希望它检查空格。我尝试了以下第一个:

if (String.IsNullOrWhiteSpace(txtFirstName.Text))

但它不起作用。我在文本框中输入了单词“Bike”,但我将其拼写为“Bike”,并带有一个空格,以查看它是否会返回错误消息,但它没有。

public partial class frmPersonnel : System.Web.UI.Page
{
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        //lblError.Text = "";
        try
        {
            if (txtFirstName.Text == "")
            {
                txtFirstName.BackColor = System.Drawing.Color.Yellow;
                lblError.Text += "Please enter first name<br />";
            } 

            if (txtLastName.Text == "")
            {
                txtLastName.BackColor = System.Drawing.Color.Yellow;
                lblError.Text += "Please enter last name! <br />";
            }
            if (txtPayRate.Text == "")
            {
                txtPayRate.BackColor = System.Drawing.Color.Yellow;
                lblError.Text += "Please enter pay rate! <br />";
            }
            if (txtStartDate.Text == "")
            {
                txtStartDate.BackColor = System.Drawing.Color.Yellow;
                lblError.Text += "Please enter start date! <br />";
            }
            if (txtEndDate.Text == "")
            {
                txtEndDate.BackColor = System.Drawing.Color.Yellow;
                lblError.Text += "Please enter end date! <br />";
            }

            DateTime dt1;
            DateTime dt2;

            dt1 = DateTime.Parse(txtStartDate.Text);
            dt2 = DateTime.Parse(txtEndDate.Text);


            if (DateTime.Compare(dt1, dt2) > 0)
            {
                txtStartDate.BackColor = System.Drawing.Color.Yellow;
                txtEndDate.BackColor = System.Drawing.Color.Yellow;
                lblError.Text += "Start Date must not be greater than End Date! <br />";
            }

            else
            {
                Session["txtFirstName"] = txtFirstName.Text;
                Session["txtLastName"] = txtLastName.Text;
                Session["txtPayRate"] = txtPayRate.Text;
                Session["txtStartDate"] = txtStartDate.Text;
                Session["txtEndDate"] = txtEndDate.Text;
                Server.Transfer("frmPersonalVerified.aspx");
            }
        }
        catch (Exception)
        {

        }
    }
}

【问题讨论】:

  • string.IsNullOrWhiteSpace 不会表示字符串有空格。它将指示字符串仅由空格组成。 B ike 不是空值或空格。这是一个带有空格的字符串。
  • 是否有问题隐藏在某处?

标签: c#


【解决方案1】:

我会更改以下类型的测试:

if (txtFirstName.Text == "")

收件人:

if (string.IsNullOrWhiteSpace(txtFirstName.Text)) // .NET 4.0+

if (string.IsNullOrEmpty(txtFirstName.Text)) // .NET before 4.0

对于您的附加测试(字符串中不允许有空格):

if (string.IsNullOrWhiteSpace(txtFirstName.Text) && !txtFirstName.Text.Contains(" ")) // .NET 4.0+

if (string.IsNullOrEmpty(txtFirstName.Text) && !txtFirstName.Text.Contains(" ")) // .NET before 4.0

注意:

您需要检查lblError.Text 不包含任何内容才能继续到下一页,因为这是您的错误所在。我只能看到DateTime 测试,所以即使你的任何txt 控件没有通过验证,你仍然可以转移。

【讨论】:

【解决方案2】:

要在 Asp.Net 中进行这种验证,您应该是 using the built-in validators。如果您不希望这样做,那么您可能会考虑基于正则表达式进行比较,以对输入进行更严格的控制。对于您的 B ike 示例,您可能需要以下内容:

if (!Regex.IsMatch(txtFirstName.Text, @"^(\w)+$"))
{
    txtFirstName.BackColor = System.Drawing.Color.Yellow;
    lblError.Text += "Please enter first name<br />";
} 

上面的正则表达式将确保至少有一个可行的单词字符,如果检测到任何空格,将解析整个字符串,返回 false。对类似的控件执行此操作并修改表达式模式以满足任何不同标准的需求会很有用。

编辑:
我按假设将其保留了下来,但也不妨一提。为了使用正则表达式,您需要在代码顶部添加以下 using 语句:

using System.Text.RegularExpressions;

编辑 2:
我打折了这些物品,因为您没有询问它们,但我会在这里解决它们,因为它们给您带来了麻烦。要更改网页中 TextBox 的颜色,您需要对其应用 css。

在样式表中定义一个类,如下所示:

.yellowBox
{
    background-color: #cccc00;   
}

然后在你的块中,像这样应用样式:

if (!Regex.IsMatch(txtFirstName.Text, @"^(\w)+$"))
{
    // Define a class in your style sheet that looks like
    txtFirstName.CssClass = "yellowBox";

    // Obviously you have a lblError control, but is
    // that control visible? If not you must change its
    // visibility. This should be done after all of the
    // processing blocks are complete.
    lblError.Text += "Please enter first name<br />";
}
if ( ... next condition ... )
{

    ... 1, 2, skip a few ...
}

// If you've appended something to the lblError
// then make it visible.
if (lblError.Text.Trim().Length > 0) 
    lblError.Visible = true;

【讨论】:

  • 当我尝试你的例子时,我在“w”下得到一个错误,上面写着:无法识别的转义序列。
  • @Mike:是的,很抱歉。我发布了一个编辑。这是一个字符串文字,因此必须以 @ 符号为前缀,或者每个 \ 必须在字符串中转义,例如 \\w
  • 那个错误消失了,现在“正则表达式”出现错误:当前上下文中不存在名称“正则表达式”。
  • @Mike:编辑已发布。您缺少一个 using 语句,该语句使 Regex 在没有命名空间前导的情况下可用。
  • 我让程序运行了,但它仍然显示在带有空格的文本框中?
【解决方案3】:

怎么样:

if (txtFirstName.Text.Contains(" "))
{
    txtFirstName.BackColor = System.Drawing.Color.Yellow;
    lblError.Text += "Please enter first name without blanks<br />";             
}  

【讨论】:

    【解决方案4】:

    String.IsNullOrWhiteSpace 为空字符串或纯空白字符串返回 true 例如 ” ”。

    如果您不想在字符串 ie ("B ike") 中允许空格,请使用 Contains(' ') 测试字符串值是否存在空格。

    【讨论】:

      【解决方案5】:

      您应该查看手册:

      http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx

      指示指定的字符串是 null、空还是仅包含空白字符

      因此,如果您不希望出现任何空格(或其他空格),请使用另一个函数,例如 Contains 或使用正则表达式。

      【讨论】:

        【解决方案6】:

        有多种验证可能性,不妨看看this

        否则你可以使用类似的东西

        if (txtFirstName.Text == "" &amp;&amp; txtFirstName.Text.indexOf(" ") == -1)

        检查空格:)

        【讨论】:

          【解决方案7】:
          if (string.IsNullOrEmpty((TextBox1.Text ?? string.Empty).Trim()))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-01-29
            • 1970-01-01
            • 2014-08-14
            相关资源
            最近更新 更多