defino como una variableASP.MVC3 ModelState.IsValid no incluye la comprobación RemoteAttribute
public class EditModel
{
[Remote("IsNameAvailable", "Home", ErrorMessage = "Name is in use.")]
[Display(Name = "Name")]
public string Name{ get; set; }
}
y en el controlador principal
public JsonResult IsNameAvailable(string name)
{
if (duplicate)
return Json(false, JsonRequestBehavior.AllowGet);
else
return Json(true, JsonRequestBehavior.AllowGet);
}
pero cuando puedo comprobar el ModelState.IsValid en el Guardar acción, siempre devuelve verdadero, incluso puedo ver la pantalla del mensaje de error en la Vista.
public ActionResult Save(EditModel editModel)
{
if (!ModelState.IsValid)
{
//Return to view and display error in view
return View("Home", editModel);
}
//Input data is valid and save record
Repository.Save(editModel.Name);
}
[Problema]
¿Cómo puede el cheque ModelState también las reglas de validación de RemoteAttribure en un modelo?
Gracias por su sugerencia! El caso es que tengo muchos modelos así y quiero encontrar la mejor opción para reducir el código. La primera y la segunda opción que necesita código depende del número de modelo que utiliza el atributo remoto. ¿Puedes explicar más sobre la última opción? – daniel
El método IsValid de RemoteAttribute realmente recibe el nombre de servidor. Si observa este método con un descompilador .NET, verá que todo lo que este método hace es "return true;". Cree su propio atributo que se deriva de RemoteAttribute y coloque alguna lógica de validación real en ese método IsValid(). Por ejemplo, puede crear una propiedad adicional en su propio atributo, diga ValidationMethod. Al usar el atributo, puede pasar el método que debe realizar la validación. Y en su método IsValid(), puede llamar a ese método de validación. –