Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 MVC 3何时填充Controller.ViewData.ModelState_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 3 MVC 3何时填充Controller.ViewData.ModelState

Asp.net mvc 3 MVC 3何时填充Controller.ViewData.ModelState,asp.net-mvc-3,Asp.net Mvc 3,目前,我正在阅读MVC3源代码,试图找出控制器的ModelState何时设置 从Controller.cs中我可以看到ModelState属性被委托给其ViewData的ModelStata属性,如下代码所示: public ModelStateDictionary ModelState { get { return ViewData.ModelState; } } protected internal v

目前,我正在阅读MVC3源代码,试图找出控制器的ModelState何时设置

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

    public ModelStateDictionary ModelState {
        get {
            return ViewData.ModelState;
        }
    }
        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
                )
            );
        }
    }
        foreach (ModelValidationResult validationResult in ModelValidator.GetModelValidator(metadata, ControllerContext).Validate(null)) {
            ModelState.AddModelError(DefaultModelBinder.CreateSubPropertyName(prefix, validationResult.MemberName), validationResult.Message);
        }
但是,我只能看到ViewData.ModelState似乎只通过Controller.cs中的ValidateModel()方法填充,如下代码所示:

    public ModelStateDictionary ModelState {
        get {
            return ViewData.ModelState;
        }
    }
        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
                )
            );
        }
    }
        foreach (ModelValidationResult validationResult in ModelValidator.GetModelValidator(metadata, ControllerContext).Validate(null)) {
            ModelState.AddModelError(DefaultModelBinder.CreateSubPropertyName(prefix, validationResult.MemberName), validationResult.Message);
        }
在上面的代码中,TryValidateModel()方法将间接填充Controller.ModelState,如下代码所示:

    public ModelStateDictionary ModelState {
        get {
            return ViewData.ModelState;
        }
    }
        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
                )
            );
        }
    }
        foreach (ModelValidationResult validationResult in ModelValidator.GetModelValidator(metadata, ControllerContext).Validate(null)) {
            ModelState.AddModelError(DefaultModelBinder.CreateSubPropertyName(prefix, validationResult.MemberName), validationResult.Message);
        }

但是我搜索了所有的源代码,没有找到任何调用ValidateModel()方法的地方,而且从access修饰符来看,这个方法是受保护的,我想知道MVC 3框架在请求处理过程中是如何调用这个方法的,或者ValidateModel()只能由继承的控制器类中的用户调用。

我想知道这个问题是否与: