validar validacion vacio pattern formulario extension archivo jquery asp.net-mvc validation asp.net-mvc-3 razor

jquery - validacion - validar input file php



Realice la validaciĆ³n del lado del cliente para el atributo personalizado (2)

A continuación, le indicamos cómo proceder:

Comience definiendo el atributo de validación personalizado:

public class FutureDateAttribute : ValidationAttribute, IClientValidatable { public override bool IsValid(object value) { if (value == null || (DateTime)value < DateTime.Now) return false; return true; } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { yield return new ModelClientValidationRule { ErrorMessage = this.ErrorMessage, ValidationType = "futuredate" }; } }

Observe cómo implementa IClientValidatable . Luego escribimos nuestro modelo:

public class MyViewModel { [FutureDate(ErrorMessage = "Should be in the future")] public DateTime Date { get; set; } }

Entonces un controlador:

public class HomeController : Controller { public ActionResult Index() { return View(new MyViewModel { // intentionally put in the past Date = DateTime.Now.AddDays(-1) }); } [HttpPost] public ActionResult Index(MyViewModel model) { return View(model); } }

y finalmente una vista:

@using (Html.BeginForm()) { @Html.LabelFor(x => x.Date) @Html.TextBoxFor(x => x.Date) @Html.ValidationMessageFor(x => x.Date) <input type="submit" value="OK" /> }

La última parte para que la magia suceda es definir el adaptador personalizado:

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> <script type="text/javascript"> // we add a custom jquery validation method jQuery.validator.addMethod(''greaterThan'', function (value, element, params) { if (!/Invalid|NaN/.test(new Date(value))) { return new Date(value) > new Date($(params).val()); } return isNaN(value) && isNaN($(params).val()) || (parseFloat(value) > parseFloat($(params).val())); }, ''''); // and an unobtrusive adapter jQuery.validator.unobtrusive.adapters.add(''futuredate'', { }, function (options) { options.rules[''greaterThan''] = true; options.messages[''greaterThan''] = options.message; }); </script>

Creé un Atributo de Validación Personalizado:

public class FutureDateAttribute : ValidationAttribute { public override bool IsValid(object value) { if (value == null|| (DateTime)value < DateTime.Now) return false; return true; } }

¿Cómo puedo hacer que esto funcione en el lado del cliente también con jquery?


Tomó un poco de tiempo desde que se hizo su pregunta, pero si todavía le gustan los metadatos, y todavía está abierto para las alternativas simplificadas, puede resolver su problema utilizando las siguientes anotaciones:

[Required] [AssertThat("Date > Now()")] public DateTime? Date { get; set; }

Funciona tanto para el servidor como para el cliente, de fábrica. Para obtener más detalles, eche un vistazo a ExpressiveAnnotations biblioteca ExpressiveAnnotations .