2010-08-13 10 views
24

Puede que esté desactualizado, pero un principio que adhiero es evitar los valores nulos tanto como sea posible.Cómo establecer el valor predeterminado de la cadena vacía TextBox en lugar de nulo

Sin embargo, lo que he encontrado es que para una vista fuertemente tipada en la que el usuario ingresa las propiedades de un objeto que quiero guardar, si algunos campos no se ingresan, se asignan como nulos.

Luego, cuando intenta guardar los cambios, la validación falla.

Entonces, en lugar de establecer cada propiedad en una cadena vacía, ¿cómo puedo configurar automáticamente cada cuadro de texto en un formulario para que de forma predeterminada sea una cadena vacía en lugar de nulo?

+0

Siempre he encontrado evitando nulos tanto como sea posible una cosa extraña . Nulo es una cosa hermosa. En una tabla de base de datos, la fila de registro tiene una columna que admite nulos y es nula, significa que no se proporcionó ningún valor antes. Este conocimiento es tan importante para las reglas de negocios y las lógicas para las empresas que he encontrado una y otra vez. –

+0

Veo que los nulos son útiles al calcular un promedio para un rango de números. También nulo es bueno para las fechas que aún no se han ingresado. De lo contrario, ¿por qué un nulo es mejor que una cadena vacía o un cero? Todo lo que parece hacer es generar más código de placa de caldera para detener las excepciones de nullreferencia no deseadas. – arame3333

+0

Ese es un buen punto, aunque en lugar de buscar nulo en la mayoría de los mismos lugares, para evitar excepciones de referencia nula no deseadas, está comprobando si! EmptyString). Las excepciones de referencia nula envejecen, pero pueden ser un buen nivel de "control/prueba de calidad". Pases de cadena vacíos, no hay excepción, pero no deberían estar vacíos, null dispara una excepción y, por lo tanto, un desarrollador puede descubrir errores más rápido, tal vez. Es curioso, odio ver columnas de cadena vacías en Sql Seleccionar resultados lol –

Respuesta

52

Se puede poner el atributo siguiente en la cadena-propiedades en su modelo:

[DisplayFormat(ConvertEmptyStringToNull=false)] 

Así que cuando alguien envía un formulario con campos de texto vacíos, estos será una cadena vacía en lugar de null ...

+0

es eso, lo que estoy buscando. Gracias @Yngve B. Nilsen –

2

Para ser sincero, diría que su metodología de codificación está desactualizada y defectuosa. Deberías manejar todas las posibilidades, no es difícil. Eso es exactamente para lo que es string.IsNullOrEmpty(value);.

supongo que su lógica de validación es algo así como:

if (value == string.Empty) { isValid = false; } 

Por lo tanto, no controla los valores nulos. Deberías reemplazar ese cheque para que también verifique si hay nulos.

string value1 = null; 
string value2 = string.Empty; 

string.IsNullOrEmpty(value1); // true 
string.IsNullOrEmpty(value2); // true 
+0

Veo que mi pregunta no está clara. Estoy buscando una respuesta que ver con los metadatos o una plantilla extendida. Esta es una pregunta de MVC en lugar de una pregunta de C#. – arame3333

+0

Publica un código en tu pregunta para que podamos ver lo que estás haciendo. – GenericTypeTea

+0

No estoy seguro de qué código puedo mostrarle. Tengo algunos cuadros de texto en una vista, y si el usuario no ingresa un valor antes de enviarlos, de manera predeterminada son nulos. Si los campos en el modelo subyacente NO son NULL, esto hace que la validación falle. He encontrado una respuesta basada en esta pregunta en SO; http://stackoverflow.com/questions/1718501/asp-net-mvc-best-way-to-trim-strings-after-data-entry-should-i-create-a-custom En lugar de recortar simplemente establecer una cadena nula en una cadena vacía. Estoy contento con esta respuesta, pero tal vez haya una más fácil. – arame3333

1

Me encontré con este problema al tratar con un servicio antiguo que requiere cadenas vacías. He creado un método de extensión:

public static string GetValueOrDefault(this string str) 
     { 
      return str ?? String.Empty; 
     } 

para que pueda usar esta opción cuando desee para asegurarse de que cualquier cadena que sea nula se vacían

yourString1.GetValueOrDefault(); 
yourString2.GetValueOrDefault(); 
Cuestiones relacionadas