asp.net mvc - tag - Cómo establecer el valor predeterminado de TextBox cadena vacía en lugar de nulo
tag helpers asp net core (4)
Puede que esté desactualizado, pero un principio que adhiero es evitar los valores nulos tanto como sea posible.
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 sea una cadena vacía en lugar de nulo?
Me encontré con este problema cuando se trata de un servicio antiguo que requiere cadenas vacías. Creé un método de extensión:
public static string GetValueOrDefault(this string str)
{
return str ?? String.Empty;
}
Así que puedes usar esto cuando quieras asegurarte de que cualquier cadena que sea nula se vacíe
yourString1.GetValueOrDefault();
yourString2.GetValueOrDefault();
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 lo que string.IsNullOrEmpty(value);
es para.
Supongo que su lógica de validación es algo así como:
if (value == string.Empty) { isValid = false; }
Por lo tanto, no maneja 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
Puede poner el siguiente atributo en sus propiedades de cadena en su modelo:
[DisplayFormat(ConvertEmptyStringToNull=false)]
Entonces, cada vez que alguien publique un formulario con campos de texto vacíos, estos serán una cadena vacía en lugar de nulo ...
Una solución alternativa al uso de atributos en cada propiedad del modelo, como se describe en la respuesta aceptada, es usar un encuadernador de modelo personalizado, ver string.empty convertido a nulo al pasar el objeto JSON al controlador MVC