La validación del cuadro de texto no funciona

En este momento, el código siguiente prueba un cuadro de texto en blanco. Si está en blanco, devuelve el error indicado debajo de la instrucción if. Eso funciona bien, pero también quiero que compruebe si hay espacios en blanco. He intentado lo siguiente para el primero:

if (String.IsNullOrWhiteSpace(txtFirstName.Text)) 

Aunque no funciona. Escribí la palabra “Bicicleta” en el cuadro de texto, pero la deletreé como “B ike” con un espacio para ver si devolvería el mensaje de error y no lo hizo.

 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) { } } }

Cambiaría el siguiente tipo de prueba:

 if (txtFirstName.Text == "") 

A:

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

Y para su prueba adicional (no se permiten espacios en la cadena):

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

Nota:

Deberá verificar que lblError.Text no contenga nada para continuar en la página siguiente, ya que esto es lo que contiene sus errores. Solo puedo ver la prueba de DateTime , por lo que incluso si alguno de sus controles de txt ha fallado la validación, todavía se transfiere.

Para realizar este tipo de validación en Asp.Net, debería estar utilizando los validadores integrados . Si esto no es deseable para usted, entonces podría considerar realizar comparaciones basadas en expresiones regulares para aplicar un control más estricto sobre las entradas. En el caso de tu ejemplo de B ike , querrías algo como:

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

La expresión regular anterior se asegurará de que haya al menos un carácter de palabra viable y analizará toda la cadena devolviendo false si se detecta algún espacio en blanco. Sería útil hacer esto para controles similares y modificar el patrón de expresión para satisfacer las necesidades de cualquier criterio diferente.

Editar:
Dejé esto como asumido, pero podría ser mencionado. Para usar el Regex, deberá agregar lo siguiente utilizando la statement en la parte superior de su código:

 using System.Text.RegularExpressions; 

Edición 2:
Desconté estos artículos porque no los preguntaste, pero los abordaré aquí porque te están dando problemas. Para cambiar el color del cuadro de texto en la página web, deberá aplicar css.

Defina una clase en su hoja de estilo que se parece a:

 .yellowBox { background-color: #cccc00; } 

Luego en tu bloque, aplica el estilo así:

 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;

Qué pasa:

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

String.IsNullOrWhiteSpace devuelve true para una cadena nula o una cadena que es puramente espacio en blanco Por ejemplo, “”.

Si no desea permitir espacios en la cadena, es decir (“B ike”), pruebe el valor de la cadena para los espacios que usan Contains (”).

Debes consultar el manual:

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

Indica si una cadena especificada es nula, vacía o solo consta de caracteres de espacio en blanco .

Por lo tanto, use otra función si no desea que haya espacios (u otros espacios en blanco), como Contains o el uso de un RegEx.

Hay varias posibilidades de validación, tal vez echar un vistazo a esto .

Si no puedes usar algo como

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

que comprueba los espacios en blanco 🙂

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