Asp.net mvc 3 MVC 3何时填充Controller.ViewData.ModelState
目前,我正在阅读MVC3源代码,试图找出控制器的ModelState何时设置 从Controller.cs中我可以看到ModelState属性被委托给其ViewData的ModelStata属性,如下代码所示: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
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()只能由继承的控制器类中的用户调用。我想知道这个问题是否与: