要验证绑定到具体类型的HttpPost操作,我可以使用ModelState.IsValid
public ActionResult Create(MyModelType myModel)
{
if(ModelState.IsValid)
{
// Do some stuff
return RedirectToAction("Details", 0);
}
else
{
return View();
}
}
这显然不适用于FormCollection
,因为没有要验证的模型
public ActionResult Create(FormCollection collection)
{
if(ModelState.IsValid) // Never invalid
{
当动作接受ModelState.IsValid
时,应该使用什么代替FormCollection
?
P.S。一千个道歉,我知道这是一个愚蠢的问题
答案 0 :(得分:2)
这是正常的。您需要UpdateModel
:
public ActionResult Create()
{
var model = new MyModelType();
UpdateModel(model);
if(ModelState.IsValid)
{
...
}
...
}
在第一种情况下,调用默认模型绑定器,因为它需要从请求绑定模型。然后,此默认模型绑定器将根据您的Data Annotation规则执行验证。在第二种情况下,你什么都不做。控制器操作不了解您的模型及其数据注释以进行验证。因此,模型状态将始终有效,因为没有任何东西可以使其无效。
这就是说,你应该总是使用第一种方法。 FormCollection
只是无用的。即使你采用第二种方法(我完全不推荐),因为你可以看到你不需要任何FormCollection。