9

Estoy creando una aplicación basada en jQuery Mobile (Alpha 3)ASP.NET MVC 3 utilizando la validación discreta que viene con MVC3. Cuando se accede a una página directamente (sin hash en la URL), la validación funciona perfectamente. Sin embargo, cuando navega a la página, jQuery Mobile usa Ajax Navigation para cargarlo dinámicamente (mostrando el hash en la Url) y la validación deja de funcionar.jQuery Validación móvil y discreta

Este es un ejemplo del código en uso:

Modelo:

[Required(ErrorMessage = "Missing value")] 
[DisplayName("Property Display Name")] 
public int? PropertyName { get; set; } 

Ver (Razor):

@Html.LabelFor(model => model.PropertyName) 
@Html.TextBoxFor(model => model.PropertyName) 
@Html.ValidationMessageFor(model => model.PropertyName) 

HTML generado:

<label for="PropertyName">Property Display Name</label> 
<input data-val="true" data-val-number="The field Property Display Name must be a number." data-val-required="Missing value" id="PropertyName" name="PropertyName" type="text" value="" /> 
<span class="field-validation-valid" data-valmsg-for="PropertyName" data-valmsg-replace="true"></span> 

Es posible que otras páginas se hayan cargado previamente y los elementos HTML ya no tengan identificadores únicos. Además de rodar mi propia clase Html Helper para generar el HTML para Label, TextBox y ValidationMessage, ¿hay alguna manera de manejar este escenario?

+0

me preguntaba sobre los identificadores únicos con JQM y todavía me molesta. Los propios autores de JQM no dicen mucho al respecto. Incluso vi un ejemplo de pies de página presistentes donde los identificadores se duplicaron. Veo dos soluciones: o bien cuidar sus identificaciones por su cuenta o destruir el almacenamiento en caché de JQM al eliminar por la fuerza la página que deja del DOM a medida que se carga el nuevo - evento 'pagebeforecreate' – naugtur

+0

Estamos teniendo problemas similares, pero no lo hacemos' Lo tengo funcionando en absoluto. Estamos en jQ 1.5 y jQM 1.03a. Luchando aquí ... – pavsaund

Respuesta

5

¿Ha llamado jQuery.validator.unobtrusive.parse() después de cargar contenido nuevo? Lea this post en el blog de Brad Wilson.

14

He estado luchando un poco con este mismo problema, pero @Zote me apuntó en la dirección correcta.

parse() es el camino a seguir, pero asegúrese de pasar en un ejemplo de selección:

jQuery.validator.unobtrusive.parse("form") 

o

jQuery.validator.unobtrusive.parse(document) 

La mejor manera de enganchar esto es probablemente a través de JQMs pageshow evento. Esto entonces se pondría en marcha después de cada nueva transición de página, como tal, Es posible que también prefiere hacerlo antes JQM ha hecho su magia en la página, así mediante el uso de la pagebeforeshow caso

$('div').live('pageshow',function(event){ 
    jQuery.validator.unobtrusive.parse(".ui-page-active form"); 
}); 

Al utilizar el .ui-page-active, se Reduzca su búsqueda a la página actualmente activa.

+1

Esto debería ser aceptado como la respuesta. El código más reciente para jQuery 1.7 y jqm 1.2 sería: $ (documento) .on ('pageinit', '#feedback_page', función (e) { $ .validator.unobtrusive.parse ($ (this) .find (' formulario ')); }); – TruMan1

Cuestiones relacionadas