- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
有人能告诉我在 global.asax 中使用 [ModelBinder()]
属性与通过 ModelBinders.Add()
注册模型绑定(bind)器的优缺点吗?
我能想到的一个优点是它更明确,而在全局 ModelBinders
中注册对于检查操作方法的人来说并不那么明显。
我能想到的一个权衡是它不可重用,因为您必须将此属性添加到需要使用此模型绑定(bind)器的所有操作方法,而在全局 ModelBinders
中注册将使它可用于接收该模型的所有操作方法。
这是唯一的区别吗?
换句话说,这样说是正确的吗:
[ModelBinder()]
。ModelBinders
中。最佳答案
这些技术的结果是一样的,所以这主要取决于团队对什么感觉更满意。所以你可以想出一个像你所说的那样的约定。
就个人而言,我更喜欢不必在使用该模型的每个操作方法上都设置属性。所以我会选择以下选项之一:
像这样设置模型类的属性:
[ModelBinder(typeof(MyModelBinder))]
public class MyModel
{
...
}
全局注册binder
ModelBinders.Binders.Add(typeof(MyModel), new MyModelBinder())
我更喜欢其中之一的另一个原因是,如果您必须手动触发模型绑定(bind)过程,您可能还希望使用自定义模型绑定(bind)器:
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())
...
}
您还可以选择通过实现接口(interface) IModelBinderProvider
并在 global.asax 中注册来实现您自己的选择模型绑定(bind)器的逻辑
ModelBinderProviders.BinderProviders.Add(new CustomModelBinderProvider())
在方法参数中使用属性的一种方法可能是为该特定方法覆盖否则将使用的模型绑定(bind)器。因此,您可以为您的类全局注册一个模型绑定(bind)器,并使用属性在一个特定的操作方法中覆盖它。
最后有很多选择模型 Binder 的选项。在 asp MVC 3 中,这将通过以下方式解决(假设您使用的是默认的 ControllerActionInvoker)
Action 参数的属性。请参阅 ControllerActionInvoker class 的 GetParameterValue 方法
从 IModelBinderProvider 返回的 Binder。请参阅 ModelBinderDictionary class 中的 GetBinder 方法
在 ModelBinders.Binders 字典中全局注册的 Binder。
模型类型的 [ModelBinder()]
属性中定义的 Binder。
DefaultModelBinder。
关于c# - 使用 ModelBinder 属性与 ModelBinders.Add(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13746472/
有人能告诉我在 global.asax 中使用 [ModelBinder()] 属性与通过 ModelBinders.Add() 注册模型绑定(bind)器的优缺点吗? 我能想到的一个优点是它更明确,
我想创建一个基于 CMS 内容的动态表单。我的字段(以及更多属性)的标签将在 CMS 中生成。为了说明,我在 Controller GET 操作中静态创建了 View 模型。使用自定义模型绑定(bin
我有一个自定义的 ModelBinder,它使用这样的代码将 web 与对象绑定(bind)" [ModelBinder(typeof(CustomizedModelBinder))]
我正在尝试创建一个非常简单的表单来从模型集合中发回一些值 当我单击“提交”时,查看返回的集合,它不包含任何对象。我还发现 asp-for 没有生成我期望的集合索引。 我有一个简单的模型 public
我有一个问题,我正在开发一个 asp.net mvc 项目。网站使用土耳其语。当我将此网站发布到 IIS 时,土耳其语字符在网页中变得疯狂,所以我在 web.config 中将全局化设置为 在此之后
我们有一个自定义模型绑定(bind)器,可以将 json 反序列化为对象列表,我想将该模型绑定(bind)器用于多个 View ,每个 View 都使用不同的 View 模型。 我们想要避免的是必须为
正如问题标题所暗示的那样,我正在尝试通过对 MVC Controller 的 $ajax 调用来发布数组集合(如果您愿意,可以是数组数组)以绑定(bind)到 Controller 。我已经找到了所有
我遇到了一个似乎与反射和模型联编程序验证有关的问题,尤其是 FormatterParameterBinding.ExecuteBindingAsync(..),尽管我可以使用方法来执行操作如果我可以使
上下文:在 Asp.net Core 2.1 下的 WebAPI 中,我必须创建一个 POST 端点, [服务器]/MyController/{Parameter1}/MoreRouteThing/。
我有一个自定义模型 Binder ,我知道将其分配给我的操作方法的两种方法: 要么在方法上: public ActionResult MyAction([ModelBinder(typeof(MyCu
我有一个 POCO,我将其用作 MVC3 中操作的参数。像这样: 我的类型 public class SearchData { public string Property1 { get; s
我一直在用 ASP.NET MVC2 进行一些实验,并遇到了一个有趣的问题。 我想围绕将用作 MVC 应用程序中的模型的对象定义一个接口(interface)。此外,我想通过使用验证属性标记此接口(i
我在某些模型中使用了一个子模型类(UserInfo),它应该包含一些与用户相关的信息。该子模型可用于各种模型,例如 public class Model { int string Value
我有以下复杂模型: 类别 - 有 -> 列表 有 -> 列表 我正在尝试进行创建操作,我可以在其中提取所有现有类别并为每个类别插入一个列表,包括子项目。例如: -Cat1 -- 新项目组1 --- 新
我的模型上有一组对象,我正在使用 EditFor 函数在 View 中呈现这些对象,并且我有一个 EditorTemplate 负责实际呈现每个对象。 @Html.EditorFor(model =>
我有一个正在使用的 api,它将对我的服务器端方法之一执行一些 JSON 的 POST。 我正在创建一些映射到该 JSON 结构的 C# 类。我的问题是发布给我的字段之一名为“对象”,它是一个字符串。
我想创建一个不同语言的网站。我已经读到我可以创建一个 ActionFilter ,但我有一个小问题: 我必须创建一个自定义 ModelBinder 才能使用英语和德语数字格式(123,456,789.
我想为 ASP.NET MVC 编写一个模型绑定(bind)程序,它将更正用户可见的值。也许它会将值的首字母大写、修剪字符串等等。 我想将这种行为封装在模型绑定(bind)程序中。 例如,这里有一个用
我有一个正在使用的 api,它将对我的服务器端方法之一执行一些 JSON 的 POST。 我正在创建一些映射到该 JSON 结构的 C# 类。我的问题是发布给我的字段之一名为“对象”,它是一个字符串。
我已经实现了 ModelBinder,但它的 BindModel() 方法没有被调用,并且我收到错误代码 500 并显示以下消息: 错误: 不能从“MyModelBinder”创建一个“IModelB
我是一名优秀的程序员,十分优秀!