ASP.NET MVC ModelState.IsValid не работает - PullRequest
2 голосов
/ 21 января 2011

У меня есть метод этого контроллера для создания

[HttpPost]
    public ActionResult Create(Topic topic)
    {
        if (ModelState.IsValid)
        {
            topicRepo.Add(topic);
            topicRepo.Save();

            return RedirectToAction("Details", new { id = topic.ID });
        }
        return View(topic);
    }

и это для редактирования

        [HttpPost]
        public ActionResult Edit(int id, FormCollection formCollection)
        {
            Topic topic = topicRepo.getTopic(id);
            if (ModelState.IsValid)
            {
                UpdateModel<Topic>(topic);
                topicRepo.Save();
                return RedirectToAction("Details", new { id = topic.ID });
            }
            return View(topic);
        }

Оба эти метода используют общую частичную страницу (.ascx).

Проверка работает, когда я пытаюсь создать тему, но не работает, когда я пытаюсь ее редактировать

1 Ответ

8 голосов
/ 21 января 2011

Это нормально. В первом примере вы используете модель в качестве параметра действия. Когда механизм связывания моделей по умолчанию пытается связать эту модель из запроса, он автоматически активирует проверку, и когда вы вводите действие, ModelState.IsValid уже назначено.

Во втором примере ваше действие не требует модели, только сбор ключа / значения и без проверки модели не имеет смысла. Проверка запускается методом UpdateModel<TModel>, который в вашем примере вызывается после вызова ModelState.IsValid.

Так что вы можете попробовать это:

[HttpPost]
public ActionResult Edit(int id)
{
    Topic topic = topicRepo.getTopic(id);
    UpdateModel<Topic>(topic);
    if (ModelState.IsValid)
    {
        topicRepo.Save();
        return RedirectToAction("Details", new { id = topic.ID });
    }
    return View(topic);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...