ASP.NET MVC ModelState.IsValid不起作用
问题描述:
我有这个控制器的方法创建ASP.NET MVC ModelState.IsValid不起作用
[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) 。
验证的工作原理,当我尝试创建话题,但是当我尝试编辑
答
这是正常的不正常工作。在第一个示例中,您将使用模型作为操作参数。当默认模型联编程序试图从请求中绑定此模型时,它将自动调用验证,并且当您输入动作时,已经分配了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);
}
太感谢你了! – 2011-01-21 15:38:18