2012-04-13 13 views
15

tengo la vista a continuación:Realizar la validación de campos ocultos

@Html.LabelFor(m => m.CompanyPostCode) 
    @Html.TextBoxFor(m => m.CompanyPostCode) 

    @Html.LabelFor(m => m.CompanyCity) 
    @Html.TextBoxFor(m => m.CompanyCity) 

    @Html.HiddenFor(m => m.CompanyCityID) 

Todos los atributos se marcan como [Obligatorio] en mi modelo de vista. Entonces el problema es que mi CompanyCityID (marcado como Requerido) está oculto y, por lo tanto, no se realiza ninguna validación en la vista. Si muestro este atributo en mi vista, la validación está hecha.

enter image description here

Mi pregunta: ¿es posible llevar a cabo una validación en un campo oculto? Existe una solución?

Puede parecer un poco extraño validar un campo oculto. La razón es que este campo está lleno de jQuery basado en reglas especiales. Si no está completo, sé que algo no es válido en la vista.

Gracias.

Respuesta

27

La posible razón puede ser que hay una línea ignore: ':hidden' en el archivo jquery.validate.unobtrusive.js.

Después de la versión 1.9.0 es un comportamiento predeterminado. Se puede arreglar eso manualmente mediante la adición de

$.validator.setDefaults({ ignore: [] }); 

Como se puede ver here

Otro cambio debe hacer la configuración de formas con elementos ocultos más fácil, estos son ahora ignorados por defecto (opción “ignoran "Tiene ": oculto "ahora como predeterminado). En teoría, esto podría romper una configuración existente de . En el caso improbable de que realmente lo haga, puede solucionarlo por configurando la opción ignorar en "[]" (corchetes sin las citas ).

+0

Muchas gracias. Eso está claro para mí ahora. – Bronzato

+0

Realmente odio ser ese tipo que corrige a las personas, pero la configuración de ignorar no está establecida por jquery.validate.unobtrusive.js. Además, tenga en cuenta cómo funciona setDefaults antes de usarlo. Si configura los valores predeterminados una vez que ya ha activado la validación del formulario, ya es demasiado tarde con esta llamada. Por favor, vea mi escrito para una explicación más detallada. http://stackoverflow.com/questions/8466643/jquery-validate-enable-validation-for-hidden-fields/14574974#14574974 – JustinMichaels

+0

@JustinMichaels, tal vez algo ha cambiado desde que escribí esta respuesta. En ese momento revisé jquery.validate.unobtrusive.js e ignoré la configuración que estaba allí. –

-1

Siempre se puede poner @Html.HiddenFor(m => m.CompanyCityID) dentro de un div oculto y cambiarlo a EditorFor().

CSS

.hidden { 
    display: none; 
}​ 

Ver

<div class="hidden"> 
     @Html.EditorFor(m => m.CompanyCityID) 
</div 
+2

Esto no parece funcionar. Creo que todavía puede decir que está escondido, incluso si es un padre que está escondido. –

0

También se puede simplemente comentar esta línea en el archivo jquery.validate.js. ignorar: ": oculto"

+0

respuesta duplicada a Chuck Norris –

0

Tuve este problema. En mi caso, tuve que llamar al validador después de la llamada ajax y luego agregar el indicador 'ignorar'. Consulte el siguiente ejemplo:

$.validator.unobtrusive.parse("#frm"); 
$.validator.setDefaults({ ignore: [] }); 

Se invocaron en Document.Ready().

0

Si no tiene que usar javascript, en su Controlador y en su acción de la vista relacionada, puede agregar un error de modelo antes de validar su modelo.Ejemplo:

[HttpPost] 
     public ActionResult Fix(YourModel mdl) 
    { 

    if (mdl.CompanyCityID==0) 
     ModelState.AddModelError("", "Your error message!"); 

    if (ModelState.IsValid) 
    { 


     // 
     //Some code 
     // 

     return View("YourView", yourlist); 
    } 

    return View(mdl); 
} 
Cuestiones relacionadas