1

在控制器方法调用期间会发生什么?控制器中每个 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 吗?

4

1 回答 1

3

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

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

如果我返回 int 与 ActionResult:

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

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

于 2012-09-26T14:54:25.750 回答