【问题标题】:MVC Controller Actions and ModelState.IsValid what happensMVC 控制器操作和 ModelState.IsValid 会发生什么
【发布时间】:2012-09-18 05:30:36
【问题描述】:

在控制器方法调用期间会发生什么?控制器中每个 PUBLIC 方法的 MVC 是否评估/设置 ModelState?它是否测试方法参数中的每个类??

public ActionResult Create(Entity myEntity, AnotherEntity, myEntity2)
{
    if (ModelState.IsValid)
    {

如果我返回 int 与 ActionResult:

public int Create(Entity myEntity, AnotherEntity, myEntity2)
{
    if (ModelState.IsValid)
    {

还会有带有评估类的 ModelState 吗?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    其实不是控制器。这是模型粘合剂。模型绑定器的职责是在给定请求值的情况下实例化相应的模型。所以第一步是模型绑定,第二步是验证。第一步由模型绑定器完成。如果在此步骤中出现错误(例如,您尝试将模型上的整数字段绑定到用户输入任意文本的输入文本),模型绑定器会自动将错误添加到模型状态,因此一旦您输入控制器动作你可以测试ModelState.IsValid是否。

    如果模型绑定成功,那么您将拥有一个模型实例,该实例现在已传递给相应的验证框架。因此,例如,如果您使用 Data Annotations 并使用验证属性修饰模型属性,它们将被评估,如果出现错误,它们将再次自动添加到 ModelState。

    如果我返回 int 与 ActionResult:

    您将违反 ASP.NET MVC 中所有控制器操作都必须返回 ActionResult 的标准约定。但是返回类型实际上与输入参数的模型绑定和验证无关。返回类型可以是任何可能的 ActionResult 派生类或自定义类。

    因此,例如,如果您想渲染模型的 HTML 表示,则返回 ViewResult。如果要返回模型的 JSON 表示,则返回 JsonResult。如果你想返回一些静态字符串,你返回一个ContentResult。如果您想允许用户下载文件,请返回 FileResult。以此类推。

    【讨论】:

    • 我知道是模型活页夹。我不知道什么时候调用模型绑定器以及调用什么。调用方法时,模型绑定器是否会自动为控制器中的每个公共方法调用?还是仅对 ActionResults 执行此操作?然后模型绑定器是否会查看方法参数中的每个类并将所有错误汇总到 ModelState 中
    • 模型绑定器在您的操作被调用之前被调用。模型绑定器负责从请求中检索所有值并实例化您的模型并通过解析值来设置其属性。完成所有这些工作后,将调用控制器操作并传递由模型绑定器创建的模型。
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多