MVC 3何时填充Controller.ViewData.ModelState

时间:2013-01-07 20:01:05

标签: asp.net-mvc-3

目前我正在阅读MVC 3源代码,试图找出何时设置Controller的ModelState。

从我从Controller.cs看到的代码中,ModelState属性被委托给它的ViewData的ModelStata属性,如下面的代码所示:

    public ModelStateDictionary ModelState {
        get {
            return ViewData.ModelState;
        }
    }

但是我只能看到ViewData.ModelState似乎只通过Controller.cs中的ValidateModel()方法填充,如下面的代码所示:

        protected internal void ValidateModel(object model, string prefix) {
        if (!TryValidateModel(model, prefix)) {
            throw new InvalidOperationException(
                String.Format(
                    CultureInfo.CurrentCulture,
                    MvcResources.Controller_Validate_ValidationFailed,
                    model.GetType().FullName
                )
            );
        }
    }

在上面的代码中,TryValidateModel()方法将间接填充Controller.ModelState,如下面的代码所示:

        foreach (ModelValidationResult validationResult in ModelValidator.GetModelValidator(metadata, ControllerContext).Validate(null)) {
            ModelState.AddModelError(DefaultModelBinder.CreateSubPropertyName(prefix, validationResult.MemberName), validationResult.Message);
        }

但是我搜索了所有的源代码,并没有找到任何调用ValidateModel()方法的地方,也没有找到任何调用者访问修饰符,这个方法受到保护,我想知道这个方法在请求期间是如何被MVC 3框架调用的处理,或者ValidateModel()只应由继承的控制器类中的用户调用。

0 个答案:

没有答案