if(ModelState.IsValid)不能与FormsCollection一起使用。用什么代替?

时间:2011-06-10 10:01:43

标签: asp.net-mvc-2 validation

要验证绑定到具体类型的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。一千个道歉,我知道这是一个愚蠢的问题

1 个答案:

答案 0 :(得分:2)

这是正常的。您需要UpdateModel

public ActionResult Create()
{
    var model = new MyModelType();
    UpdateModel(model);
    if(ModelState.IsValid) 
    {
        ...
    }
    ...
}

在第一种情况下,调用默认模型绑定器,因为它需要从请求绑定模型。然后,此默认模型绑定器将根据您的Data Annotation规则执行验证。在第二种情况下,你什么都不做。控制器操作不了解您的模型及其数据注释以进行验证。因此,模型状态将始终有效,因为没有任何东西可以使其无效。

这就是说,你应该总是使用第一种方法。 FormCollection只是无用的。即使你采用第二种方法(我完全不推荐),因为你可以看到你不需要任何FormCollection。