我有这个控制器的创建方法
[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)。
验证在我尝试创建主题时起作用,但在我尝试编辑时不起作用
答案 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);
}