ASP.NET MVC ModelState.IsValid不起作用

And*_*yev 2 validation asp.net-mvc modelstate asp.net-mvc-2

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

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

            return RedirectToAction("Details", new { id = topic.ID });
        }
        return View(topic);
    }
Run Code Online (Sandbox Code Playgroud)

这个用于编辑

        [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);
        }
Run Code Online (Sandbox Code Playgroud)

这两种方法都使用公共部分页面(.ascx).

当我尝试创建主题但在我尝试编辑主题时不起作用时验证有效

Dar*_*rov 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);
}
Run Code Online (Sandbox Code Playgroud)