2012-03-23 20 views
5

Actualmente, tengo una aplicación MVC 3 que utiliza el motor Razor View. Tengo validación discreta habilitada. El problema es que, por alguna razón, al cargar la página, mi vista de edición muestra errores para los campos obligatorios (aunque los campos tienen un valor). ¿Alguien más se encontró con esto? Alguna sugerencia para resolver esto? Gracias.Activación de validación en la página Carga

ejemplo Campo de problema:

<div class="full"> 
      <label>Description:</label> 
      @Html.EditorFor(x=>x.Description, new{@class="super-textarea"}) 
      @Html.ValidationMessageFor(x => x.Description) 

     </div> 

datos de anotaciones de modelo:

configuración
 [Required, DataType(DataType.MultilineText)] 
    public virtual string Description { get; set; } 

WebConfig permitido:

 <add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

y por supuesto los archivos apropiados jquery ....

+0

Su extracto de código ayudaría mucho – AFD

+0

Así que ... en realidad no parece ser una problema con la validación discreta, sino más bien que el estado de mi modelo se está volviendo inválido antes de la carga de la página .... – user1287132

Respuesta

10

Ok. Encontrado el problema La validación estaba sucediendo debido a la vinculación del modelo que intenta tener lugar. Esto estaba sucediendo porque nuestro Método Get se ve así.

[HttpGet, RequestedObjectFilter] 
    public virtual ViewResult Edit(TKey id, T requestedObject) 
    { 

     return View(requestedObject); 
    } 

Una característica de .NET MVC es que en cualquier momento un valor de referencia se pasa como un parámetro en la firma del método de un ViewResult, ModelBinding se activa, que a su vez dispara validación. La razón por la que estábamos pasando el objeto a nuestro método se debió a nuestro RequestedObjectFilter que recuperaría la entidad relacionada de nuestro repositorio abstraído y la pasaría a este método a través de la propiedad ActionParameters. Refactorizamos RequestedObjectFilter para configurar ViewModel, lo que nos permite eliminar el parámetro del método y así resolver el problema. Ahora nuestro método es el siguiente:

 [HttpGet, RequestedObjectFilter] 
    public virtual ViewResult Edit(TKey id) 
    { 

     return View(); 
    } 
+0

¡Genial! Esto me ayudó porque tenía el mismo problema, gracias. –

14

También puede borrar los errores del ModelState

ModelState.Clear(); 
+0

Después de horas de probar diferentes cosas, incluso ver esta publicación pero sin pensar que era aplicable, estaba equivocado. Esto solucionó mi problema. – Caverman

Cuestiones relacionadas