route net form for asp asp.net-mvc asp.net-mvc-3 jquery-ui data-annotations asp.net-mvc-validation

asp.net-mvc - net - form asp route returnurl



La validaciĆ³n del rango de anotaciones de datos MVC no funciona correctamente (2)

Tengo un RangeValidator en una propiedad en mi modelo para permitir solo enteros que están entre 0 y 100. Tengo una vista parcial que muestra un formulario para actualizar la propiedad a través de un diálogo de jQuery UI. He mirado la fuente y puedo confirmar que los atributos de anotación de datos se están generando correctamente. Sin embargo, la validación no está funcionando correctamente. Realiza algún tipo de validación, pero no está utilizando el rango que estoy configurando. Los valores 1, 10 y 100 no producen el error. Cualquier otro valor de uno o dos dígitos produce el error. Sin embargo, si relleno con ceros, todos los valores inferiores a cien están bien.

Modelo:

public class MyModel { ... [Required(ErrorMessage = "{0} is required")] [Range(typeof(int), "0", "100", ErrorMessage = "{0} can only be between {1} and {2}")] public int Percentage { get; set; } ... }

Vista parcial:

@model MyApp.Models.Partials.MyModel <div id="myDialog" class="editModal" title="Update Percentage"> @using (Ajax.BeginForm("UpdatePercentage", "MyController", new AjaxOptions() { HttpMethod = "Post", OnSuccess = "onUpdateSuccess" }, new { name = "myForm" })) { @Html.ValidationSummary(null, new { style = "width:auto;max-width:22em; float:left;clear:both;" }) <div style="width:auto;float:left;clear:both;"> <div style="width:10em;float: left;text-align:right;clear:left;"> @Html.Label("Percentage:") </div> <div style="width:12em;margin-left:1em;float:left;clear:right;"> @Html.TextBoxFor(m => m.Percentage) </div> </div> <div style="width:23em;clear:both;text-align:center;"> <hr /> <input type="button" value="Cancel" class="cancelModalButton" data-modal="myDialog" /> <input type="submit" value="Submit" class="submitModalButton" data-modal="myDialog" data-form="myForm" /> </div> } </div>

Marcado producido:

<div id="myDialog" class="editModal" title="Update Percentage"> <form action="/Web/MyController/UpdatePercentage?Length=3" data-ajax="true" data-ajax-method="Post" data-ajax-success="onUpdateSuccess" id="form2" method="post" name="myForm"> <div class="validation-summary-valid" data-valmsg-summary="true" style="width:auto;max-width:22em;float:left;clear:both;"> <ul> <li style="display:none"></li> </ul> </div> <div style="width:auto;float:left;clear:both;margin-bottom:.75em;"> <div style="width:10em;float: left;text-align:right;clear:left;"> <label for="Percentage:">Percentage:</label> </div> <div style="width:12em;margin-left:1em;float:left;clear:right;"> <input data-val="true" data-val-number="The field Percentage must be a number." data-val-range="Percentage can only be between 0 and 100" data-val-range-max="100" data-val-range-min="0" data-val-required="Percentage is required" id="Percentage" name="Percentage" type="text" value="10" /> </div> </div> <div style="width:23em;clear:both;text-align:center;"> <hr /> <input type="button" value="Cancel" class="cancelModalButton" data-modal="myDialog" /> <input type="submit" value="Submit" class="submitModalButton" data-modal="myDialog" data-form="myForm" /> </div> </form> </div>

Veo que el tipo está configurado como text y si cambio mi TextBoxFor a EditorFor se cambia a number pero aún veo el mismo comportamiento.


Pruebe [Range(0, 100)] . Elimine ErrorMessage completo para ver que no está rompiendo nada con el formato incorrecto y los corchetes.

Si el rango puro no funciona correctamente, deja que la fuerza (MS) esté contigo. :)


Tuve este problema exacto y encontré la solución here . Necesita actualizar lo siguiente:

Validación de jQuery (al menos 1.11.1)
Validación discreta de jQuery de Microsoft (al menos 2.0.30116.0)
Ajax discreto de jQuery de Microsoft (al menos 2.0.30116.0)

El problema fue introducido rompiendo cambios en jQuery 1.9.1