文本框validation无效

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

if (String.IsNullOrWhiteSpace(txtFirstName.Text)) 

它虽然不起作用。 我在文本框中键入了“自行车”这个词,但是我拼写它像“B ike”那样用空格来查看它是否会返回错误信息而它没有。

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

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

 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控件都没有通过validation,你仍然可以转移。

要在Asp.Net中进行此类validation,您应该使用内置validation器 。 如果您不希望这样做,那么您可以考虑使用比较正则表达式来对输入应用更严格的控制。 对于你的B ike例子,你会想要这样的东西:

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

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

编辑:
我按照假设离开了这个,但也可以提到。 要使用Regex,您需要在代码顶部添加以下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
"; } 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;

关于什么:

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

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

如果你不想在字符串中允许空格即(“B ike”)使用Contains(”)测试空格的字符串值。

你应该查看手册:

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

指示指定的字符串是空,空还是包含空格字符

因此,如果您不希望存在任何空格(或其他空格),请使用其他函数,例如包含或使用RegEx。

有各种validation可能性,也许看看这个 。

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

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

检查空格:)

 if (string.IsNullOrEmpty((TextBox1.Text ?? string.Empty).Trim()))