2011-01-21 128 views
2

我有这个控制器的方法创建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) 。

验证的工作原理,当我尝试创建话题,但是当我尝试编辑

回答

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); 
} 
+0

太感谢你了! – 2011-01-21 15:38:18

相关问题