如何控制自定义模型绑定器的尝试值?

发布于 2025-01-07 03:18:13 字数 770 浏览 0 评论 0原文

我有一个带有如下签名的操作:

public ActionResult Index([ModelBinder(typeof(MyEnumModelBinder))] MyEnum myEnum)

其实现如下:

public class MyEnumModelBinder: IModelBinder
{
   public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
   {
      var valueProviderResult = bindingContext.ValueProvider.GetValue("myEnum");
      return valueProviderResult == null ? 
         MyEnum.Default : 
         valueProviderResult.AttemptedValue.ToMyEnum();
   }
}

基本上,我将原始值绑定到枚举,非常简单。工作正常。

但是,请注意为了访问尝试的值,我需要使用魔术字符串(“myEnum”)。

有什么方法可以将其提供给模型活页夹,从而移除魔术绳?

因为如果我想在其他地方使用这个模型绑定器,那么我必须确保我调用参数“myEnum”,否则会导致运行时错误。

我尝试向模型绑定器添加一个ctor,但没有地方可以实际实例化它。

有什么想法吗?

I've got an action with a signature like this:

public ActionResult Index([ModelBinder(typeof(MyEnumModelBinder))] MyEnum myEnum)

Which is implemented like this:

public class MyEnumModelBinder: IModelBinder
{
   public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
   {
      var valueProviderResult = bindingContext.ValueProvider.GetValue("myEnum");
      return valueProviderResult == null ? 
         MyEnum.Default : 
         valueProviderResult.AttemptedValue.ToMyEnum();
   }
}

Basically, i'm binding a raw value to an enum, pretty simple. Works fine.

But, notice how in order to get access to the attempted value, i need to use a magic string ("myEnum").

Is there any way i can supply this to the model binder, so remove the magic string?

Because if i want to use this model binder in other places, then i have to make sure i call the parameter "myEnum", otherwise it will cause a runtime error.

I tried adding a ctor to the model binder, but there's nowhere where i actually instantiate it.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我做我的改变 2025-01-14 03:18:13

有什么方法可以将其提供给模型绑定器,从而删除魔术字符串?

当然:

var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

Is there any way i can supply this to the model binder, so remove the magic string?

Sure:

var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文