ASP.Net MVC 3 ModelState.IsValid

时间:2011-11-14 20:21:30

标签: asp.net-mvc-3

我刚刚开始使用ASP.Net MVC 3并且在这一点上感到困惑。

在某些示例中,当运行包含输入的控制器中的操作时,将进行检查以确保ModelState.IsValid为true。某些示例未显示正在进行此检查。我应该什么时候进行检查?每当向动作方法提供输入时,是否必须使用它?

2 个答案:

答案 0 :(得分:8)

  

每当向操作方法提供输入时,是否必须使用它?

正是在使用作为操作参数提供的视图模型时,此视图模型具有与之关联的一些验证(例如数据注释)。这是通常的模式:

public class MyViewModel
{
    [Required]
    public string Name { get; set; }
}

然后:

[HttpPost]
public ActionResult Foo(MyViewModel model)
{
    if (!ModelState.IsValid)
    {
        // the model is not valid => we redisplay the view and show the
        // corresponding error messages so that the user can fix them:
        return View(model);
    }

    // At this stage we know that the model passed validation 
    // => we may process it and redirect
    // TODO: map the view model back to a domain model and pass this domain model
    // to the service layer for processing

    return RedirectToAction("Success");
}

答案 1 :(得分:2)

是。它主要用于使用[HttpPost]属性标记的操作。

应该始终验证imho视图模型(因此总是有某种验证,通常是DataAnnotation属性)。

public class MyViewModel
{
    [Required] // <-- this attribute is used by ModelState.IsValid
    public string UserName{get;set;}
}

如果您对MVC中的错误处理感兴趣,我前几天blogged about it