ASP.NET MVC ModelState.IsValid不起作用

时间:2011-01-21 15:23:39

标签: asp.net-mvc asp.net-mvc-2 validation modelstate

我有这个控制器的创建方法

[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 个答案:

答案 0 :(得分:8)

这是正常的。在第一个示例中,您使用模型作为操作参数。当默认模型绑定器尝试从请求绑定此模型时,它将自动调用验证,当您输入操作时,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);
}