definisco una variabile comeASP.MVC3 ModelState.IsValid non include RemoteAttribute controllo
public class EditModel
{
[Remote("IsNameAvailable", "Home", ErrorMessage = "Name is in use.")]
[Display(Name = "Name")]
public string Name{ get; set; }
}
e nel controller casa
public JsonResult IsNameAvailable(string name)
{
if (duplicate)
return Json(false, JsonRequestBehavior.AllowGet);
else
return Json(true, JsonRequestBehavior.AllowGet);
}
ma quando controllo il ModelState.IsValid nell'azione Save, restituisce sempre true anche se riesco a visualizzare il messaggio di errore nella 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]
Come può l'assegno ModelState anche le regole di validazione da parte RemoteAttribure in un modello?
Grazie per il suggerimento! Il caso è che ho molti modelli del genere e voglio trovare l'opzione migliore per ridurre il codice. La prima e la seconda opzione devono essere codificate in base al numero di modello che utilizza l'attributo remoto. Puoi spiegare più dell'ultima opzione? – daniel
Il metodo IsValid del RemoteAttribute viene effettivamente chiamato serveride. Se guardi questo metodo con un decompilatore .NET, vedrai che tutto questo metodo è "return true;". Creare il proprio attributo che deriva da RemoteAttribute e inserire alcune logiche di convalida effettive in tale metodo IsValid(). Ad esempio, è possibile creare una proprietà aggiuntiva sul proprio attributo, ad esempio ValidationMethod. Quando si utilizza l'attributo, è possibile passare il metodo che deve eseguire la convalida. E nel tuo metodo IsValid(), puoi chiamare quel metodo di convalida. –