side net mvc isvalid errors custom attribute asp addmodelerror asp.net-mvc-3 validation modelstate

asp.net mvc 3 - net - MVC3 Eliminar errores de ModelState



mvc validation model (4)

Tengo una situación en la que estoy cargando una imagen que el usuario ha seleccionado de su sistema de archivos local. Mi formulario en mi opinión, básicamente tiene dos botones de envío. Uno se usa para enviar el formulario normalmente y se ejecuta toda la validación. El segundo es solo para cargar la imagen, en cuyo caso no quiero validar aún.

Logré desactivar la validación del lado del cliente al darle a mi botón de envío ''Subir imagen'' un valor de clase de "cancelar nombre-estilo", por lo que

<input type="submit" name="UploadImageButton" value="Upload Image" class="style-name cancel" />

Ahora, cuando publico de nuevo, mi modelo tiene una propiedad UploadImageButton, cuando se hace clic en este botón, rellena esta propiedad (el nombre de la entrada coincide con la propiedad). De esta forma, sé si el formulario fue enviado por mi verdadero botón Enviar o por UploadImageButton.

Mi pregunta es esta ... ¿Cómo puedo desactivar la validación de ServerSide? No deseo que aparezca la información del Resumen de validación cuando el usuario haga clic en este botón. Sé que puede agregar errores de modelo personalizados usando esto

ModelState.AddModelError("{key}", "{error msg}");

Estoy buscando un medio para eliminar errores de modelo. es posible?

EDITAR:

Aquí es lo que se me ocurrió:

foreach (var key in ModelState.Keys.ToList().Where(key => ModelState.ContainsKey(key))) { //ModelState.Remove(key); //This was my solution before ModelState[key].Errors.Clear(); //This is my new solution. Thanks bbak }


En general, no desea desactivar la validación del lado del servidor ni eliminar los errores de ModelState manualmente. Es factible, pero propenso a errores, ya que debe confiar en las cadenas como claves. Volví a subir la respuesta sobre cómo quitar las llaves, porque es correcta y útil, pero recomiendo no diseñar un caso en el que debes considerarlo con firmeza.

En su caso, tiene varios botones de envío para el mismo formulario, pero realmente no está enviando el formulario cuando carga la imagen. Para evitar la validación del lado del cliente, puede usar la clase "cancelar" como ya ha indicado, pero también recomiendo tener el segundo botón de envío en una forma diferente, en cuyo caso no causa ninguna validación en su formulario principal.

Hay una segunda ventaja al usar el formulario diferente: puede enviarlo a un método ActionResult diferente que simplemente manejaría la lógica de cargar la imagen. Este método diferente simplemente no se molestaría en verificar la propiedad "IsValid" del estado del modelo: solo le importa si hay información en la imagen, y eso se puede verificar por separado. (Incluso si usa el mismo método ActionResult, puede canalizar la lógica para que no confíe en la propiedad IsValid del estado del modelo).

Si debe borrar los errores del estado del modelo, y tiene sentido borrarlos, intente esto:

foreach (var key in ModelState.Keys) { ModelState[key].Errors.Clear(); }

Esto evita que dependas de que los nombres de las teclas sean correctos, pero conserva los valores si ya existen valores (válidos o no) en el modelo.

Una última cosa que debe verificar en estos casos es si tiene valores que solo están a veces en la vista, lo que no ocasionará la validación del lado del cliente (no están en la vista), pero sí problemas de validación del lado del servidor. En este caso, es mejor utilizar @ Html.HiddenFor (model => model.PropertyName, si puede, suponiendo que el valor ya se haya configurado, simplemente no es visible en esta vista.


Esto construye respuestas anteriores, pero lo simplifica un poco más:

foreach (var modelValue in ModelState.Values) { modelValue.Errors.Clear(); }


Lo uso a veces, así que hice un método de extensión:

public static ModelStateDictionary ClearError(this ModelStateDictionary m, string fieldName) { if (m.ContainsKey(fieldName)) m[fieldName].Errors.Clear(); return m; }

Se puede usar con fluidez para borrar el error de varios campos.


Puede eliminar los errores del modelo haciendo algo como esto:

if (ModelState.ContainsKey("{key}")) ModelState["{key}"].Errors.Clear();