2009-02-14 14 views
9

Tengo una acción de controlador que tiene un DateTime que se puede nulos como uno de los parámetros que provienen de un cuadro de texto en mi formulario. Noté que si el usuario escribiera "blah" en ese cuadro de texto, obtendré un valor nulo para el parámetro DateTime y se agregará automáticamente un error de modelo. En este caso, el error ModelState que se agrega es "El valor 'blah' no es válido".¿Cómo se desactiva o se reemplaza el mensaje de error predeterminado de ModelState en Asp.net MVC?

Mi problema es que mi sitio admite varios idiomas, por lo que debo localizar este error. Normalmente solo valido y agrego los errores de ModelState, pero en este caso parece que no puedo deshacerme de él. Si agrego otro error de ModelState para el mismo cuadro de texto, no aparece.

Respuesta

8

Tengo que discrepar fuertemente con todas las respuestas que ha recibido hasta ahora. Ninguno de ellos contesta la pregunta que realizaste, que es cómo localizar los mensajes de error de MVC. Podría dedicar un gran esfuerzo a resolver esta única instancia del problema y seguir teniendo el mismo problema con los otros 50 casos de mensajes de error de MVC si no localiza realmente la aplicación. Se definen en MvcResources.resx, que se encuentra en la carpeta Resources del código fuente de MVC (o simplemente navega por el ensamblado con Reflector). En particular, está buscando el recurso Common_ValueNotValidForProperty. Localizaría estos mensajes proporcionando un ensamblaje de satélite localizado, de la misma manera que localiza cualquier aplicación .NET. Los detalles de la internacionalización/localización en aplicaciones .NET están fuera del alcance de esta respuesta, pero hay muchos libros sobre el tema. Hacer esto en MVC no es diferente de hacerlo en cualquier otra aplicación, excepto que, en la mayoría de los casos, las ubicaciones del marco ya están disponibles. MVC aún está en beta, por lo que, hasta donde yo sé, solo en inglés, por el momento. Presumiblemente, eso cambiará después del lanzamiento.

1

Quitaría ese cuadro de texto particular de la lista blanca que pasa al modelo TryUpdate/Update y lo validaría "a mano", en lugar de validarlo con el marco. Alternativamente, podría tratar de iterar a través de la colección Error de ModelState, encontrar la que desea eliminar y eliminarla; digamos, utilizando RemoveItem una vez que sepa de cuál quiere deshacerse.

EDIT: Si está utilizando el ModelBinder predeterminado, puede implementar el suyo. Asumí que, dado que generaba sus propios errores de modelo, estaba usando TryUpdateModel/UpdateModel.

0

Podría llamar al ModelState.Clear(); al comienzo de la acción. Pero no estoy seguro de que me guste tener que hacer eso en cada acción.

0

Puede hacer que el parámetro DateTime sea nulo. Luego, si no se proporciona nada, el error no se agregará a ModelState.

public ActionResult Method(Datetime? date) 
{} 

en lugar de

public ActionResult Method(Datetime date) 
{} 
Cuestiones relacionadas