I zdefiniować zmienną jakoASP.MVC3 ModelState.IsValid nie obejmują RemoteAttribute sprawdzanie
public class EditModel
{
[Remote("IsNameAvailable", "Home", ErrorMessage = "Name is in use.")]
[Display(Name = "Name")]
public string Name{ get; set; }
}
i w kontrolerze Home
public JsonResult IsNameAvailable(string name)
{
if (duplicate)
return Json(false, JsonRequestBehavior.AllowGet);
else
return Json(true, JsonRequestBehavior.AllowGet);
}
ale kiedy sprawdzić ModelState.IsValid w Save działania, zawsze zwraca wartość true, nawet widzę komunikat o błędzie w widoku.
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);
}
[Problem]
Jak sprawdzenie ModelState również zasady walidacji przez RemoteAttribure w modelu?
Dzięki za sugestię! Chodzi o to, że mam wiele takich modeli i chcę znaleźć najlepszą opcję zmniejszenia kodu. Pierwsza i druga opcja wymaga kodu zależy od liczby modelu, który używa atrybutu zdalnego. Czy możesz wyjaśnić więcej z ostatniej opcji? – daniel
Metoda IsValid metody RemoteAttribute faktycznie nazywa się serwerem. Jeśli spojrzysz na tę metodę za pomocą dekompilatora .NET, zobaczysz, że cała ta metoda ma wartość "return true;". Stwórz własny atrybut wywodzący się z RemoteAttribute i umieść pewną logikę walidacji w tej metodzie IsValid(). Na przykład możesz utworzyć dodatkową własność na swoim własnym atrybucie, powiedzmy ValidationMethod. Używając tego atrybutu, możesz przekazać dalej metodę, która powinna wykonać walidację. W metodzie IsValid() możesz wywołać tę metodę sprawdzania poprawności. –