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

时间:2012-02-21 02:48:18

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

我有一个像这样的签名的行动:

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添加到模型绑定器中,但实际上并没有实例化它。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

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

不确定

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