【问题标题】:How can I control the attempted value for a custom model binder?如何控制自定义模型绑定器的尝试值?
【发布时间】:2012-02-21 02:48:17
【问题描述】:

我有一个带有这样签名的动作:

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,但我没有在任何地方实际实例化它。

有什么想法吗?

【问题讨论】:

  • 我担心没有简单的方法可以解决这个问题。您真正要问的是如何获取参数名称。反射根本不会暴露这一点。

标签: c# asp.net-mvc asp.net-mvc-3 custom-model-binder magic-string


【解决方案1】:

有什么办法可以将它提供给模型绑定器,所以删除魔术字符串?

当然:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 2012-07-31
    相关资源
    最近更新 更多