2011-12-14 31 views
71

Tengo el siguiente en mi método de acción:¿Cómo puedo comprobar ModelState.IsValid desde el interior de mi punto de vista Razor

 if (!ModelState.IsValid) 
     return View(vm); 

En la vista no quiero presentar una tecla enviar para permitir la eliminación si el estado es el modelo no es válido. ¿Hay alguna manera de que pueda hacer esto? ¿El estado del modelo está disponible en la vista?

Actualización: Me han puesto en práctica esta basado en las respuestas que estaba dado:

  <div class="adm_td0" style=" padding: 0;"> 
      @if (ViewData.ModelState.IsValid) { 
       <input type='submit' value='Delete' name='SubmitAction' /> 
      } 
       <input type='submit' value='Cancel' name='SubmitAction' /> 
      </div> 
+0

también asegurarse de que está utilizando Html.AntiForgeryToken. La acción de eliminación podría ser falsificada fácilmente. Puede que no le importe (podría ser una pequeña aplicación interna), pero solo una advertencia adicional. El hecho de que el botón no se muestre no significa que no se pueda invocar. También verificaría el estado del modelo en el lado del servidor, así como en su publicación para asegurar que algo no fallara en el lado del cliente. –

Respuesta

160

¿El estado del modelo está disponible en la vista?

Por supuesto:

@if (!ViewData.ModelState.IsValid) 
{ 
    <div>There are some errors</div> 
} 
+0

¿Sabes si hay una manera de verificar errores específicos, algo así como: @if (ViewData.ModelState.Errors ["errorName"]) {// hacer algo} – Owen

+12

No importa, lo descubrí: Html .ViewData.ModelState ["PropertyName"]. Errors – Owen

+1

También lo usé para mostrar un error específico en el resumen de validación, y funcionó. @if (ViewData.ModelState.Keys.Any (x => x == "ErrorKeyName")) { @ Html.ValidationSummary (true, "") } – N0rA

10

No es común necesitar esto en la vista en sí, pero se puede acceder a él de este modo:

@ViewData.ModelState.IsValid 
+1

Esto será para la solicitud anterior sin embargo. No es la solicitud que SE DEBE enviar. –

+0

@ChrisKooken ¿Puedes aclarar a qué te refieres con las solicitudes? Tengo entendido que ModelState contendrá el estado de cualquier error del enlace del modelo para la solicitud que el servidor esté procesando en ese momento. –

+2

@NormanH, cuando usa '@ ViewData.ModelState.IsValid' en una * vista *, le informará sobre el estado del modelo que se procesó justo antes de mostrar la vista. Entonces el flujo es: ver A -> presionar el botón y publicar -> controlador: vinculación del modelo antes del método B -> estado inválido -> el método B devuelve la vista B -> '@ ViewData.ModelState.IsValid' le dirá qué sucedió mientras se vinculaba antes método B – bvgheluwe

Cuestiones relacionadas