在许多层次上,这是错误的:
- This is not how ASP.NET MVC is designed to work.
- Your actions do not define a clear contract of what data they expect.
- What do you get out of it? Smells like bad design.
具有约束力的模式由思考驱动。 在援引一项行动之前,它将反映方法参数清单,对于每个物体及其特性,它将援引一种模型约束器,从各种价值提供商(原POST值提供商、url参数等)找到每个财产的价值。 在具有约束力的模式中,也做了审定。
因此,不使用违约保险。 NET MVC要做到这一点,就会失去一切。
即便是你手工操作的模类约束器也一样:
IModelBinder modelBinder = ModelBinders.Binders.GetBinder(typeof(MyObject));
MyObject myObject = (MyObject ) modelBinder.BindModel(this.ControllerContext, ** ModelBindingContext HERE**);
你们可以看到,你需要使伙伴关系的《示范公约》具有独创性。 NET MVC将在内部根据它反映的现有财产进行。 这里是来自社会、文化权利委员会的亵渎。 NET MVC源代码:
protected virtual object GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) {
// collect all of the necessary binding properties
Type parameterType = parameterDescriptor.ParameterType;
IModelBinder binder = GetModelBinder(parameterDescriptor);
IDictionary<string, ValueProviderResult> valueProvider = controllerContext.Controller.ValueProvider;
string parameterName = parameterDescriptor.BindingInfo.Prefix ?? parameterDescriptor.ParameterName;
Predicate<string> propertyFilter = GetPropertyFilter(parameterDescriptor);
// finally, call into the binder
ModelBindingContext bindingContext = new ModelBindingContext() {
FallbackToEmptyPrefix = (parameterDescriptor.BindingInfo.Prefix == null), // only fall back if prefix not specified
ModelName = parameterName,
ModelState = controllerContext.Controller.ViewData.ModelState,
ModelType = parameterType,
PropertyFilter = propertyFilter,
ValueProvider = valueProvider
iii;
object result = binder.BindModel(controllerContext, bindingContext);
return result;
iii