有人能告诉我使用[ModelBinder()]属性与通过ModelBinders.Add()在global.asax中注册模型绑定的利弊吗?
我能想到的一个优点是,它更显着,而在全局ModelBinders中注册并不像检查操作方法的人那样容易。
我可以想到的一个折衷之处是,它是不可重用的,因为您必须将该属性添加到所有需要使用该模型绑定的操作方法中,而在全局ModelBinders中注册将使其可供接收该模型的所有操作方法使用。
这是唯一的区别吗?
换句话说,这样说是正确的吗?
[ModelBinder()]。ModelBinders中。发布于 2012-12-06 17:27:08
这些技术的结果将是一样的,所以这主要取决于球队对什么感觉更舒服。所以你可以像你说的那样想出一个会议。
就我个人而言,我不喜欢在使用该模型的每个操作方法上设置属性。因此,我将选择以下选项之一:
我喜欢其中之一的另一个原因是,如果您必须手动触发模型绑定过程,您可能还希望使用您的自定义模型绑定:
public ActionResult SomeActionMethod()
{
MyModel model = ...
//manually invoke the model binding process considering only query string data
//The custom model binder will be used only if it was globally registered
//in the binders dictionary or set in an attribute of the model class
TryUpdateModel(model, new QueryStringValueProvider())
...
}您还可以通过实现接口IModelBinderProvider并在global.asax中注册,来实现自己的选择模型绑定的逻辑,如
ModelBinderProviders.BinderProviders.Add(new CustomModelBinderProvider()) 在方法参数中使用属性的一种方法可能是重写该特定方法(否则将使用的模型绑定)。这样,您就可以为类全局注册一个模型绑定器,并使用该属性在一个特定的操作方法中重写它。
最后,有相当多的选择模式粘合剂的选择。在asp MVC 3中,这将通过以下方式解决(假设您使用的是默认的ControllerActionInvoker)
[ModelBinder()]属性中定义的绑定器。发布于 2014-09-09 15:46:27
在我看来,使用属性而不是添加到Global.asax中的模型绑定集合的优点是,您可以告诉方法(或类)使用哪个特定的绑定器,而不是将绑定与特定类型关联起来。然后,您可以根据上下文而不是类型创建模型。
https://stackoverflow.com/questions/13746472
复制相似问题