ASP.MVC3 ModelState.IsValid не включает проверку RemoteAttribute - PullRequest
5 голосов
/ 31 января 2012

Я определяю переменную как

public class EditModel
{
    [Remote("IsNameAvailable", "Home", ErrorMessage = "Name is in use.")]
    [Display(Name = "Name")]
    public string Name{ get; set; }
}

и в домашнем контроллере

public JsonResult IsNameAvailable(string name)
{
    if (duplicate)
        return Json(false, JsonRequestBehavior.AllowGet);
    else
        return Json(true, JsonRequestBehavior.AllowGet);
}

но когда я проверяю ModelState.IsValid в действии Сохранить, он всегда возвращает значение true, даже если я вижу сообщение об ошибке в представлении.

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);
}

[Проблема]
Как ModelState может также проверять правила проверки с помощью RemoteAttribure в модели?

1 Ответ

2 голосов
/ 31 января 2012

У вас есть два варианта.Вы можете реализовать интерфейс IDataErrorInfo или IValidatableObject и повторить проверку там.MVC поддерживает эти интерфейсы "из коробки", и ваш ModelState отразит это.

Другой вариант - создание собственного атрибута, производного от RemoteAttribute.В этом пользовательском атрибуте добавьте логику для применения той же проверки на стороне сервера.

Последний вариант - тот, который я бы выбрал, но он занимает немного больше времени. Этот вопрос должен помочь вам в этом.

...