无法添加新的自定义Model Binder?错误已添加具有相同键的项目

时间:2014-02-12 03:04:58

标签: c# .net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我正在尝试添加新的自定义Model Binder,但没有成功。下面是我的代码和基本工作(删除格式并将2,345.34转换为234534),这样做很好:

 public class TransactionModelBinder : IModelBinder
    {
        public object BindModel(ControllerContext controllerContext,
            ModelBindingContext bindingContext)
        {
            ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue("Transaction.Price");
            ModelState modelState = new ModelState { Value = valueResult };
            object actualValue = null;
            object newValue = null;
            try
            {
                if (!string.IsNullOrEmpty(valueResult.AttemptedValue))
                {
                    newValue = valueResult.AttemptedValue.Replace(",", "");
                }
                actualValue = Convert.ToDecimal(newValue,
                    CultureInfo.CurrentCulture);
            }
            catch (FormatException e)
            {
                modelState.Errors.Add(e);
            }

            bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
            return actualValue;
        }
    }

我的Global.asax代码如下:

 protected void Application_Start()
    {
        ModelBinders.Binders.Add(typeof(decimal), new CurrencyModelBinder());
        ModelBinders.Binders.Add(typeof(decimal), new TxTransactionModelBinder());

        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
       // RouteTable.Routes.MapHubs();


    }

问题: 在运行代码TransactionModelBinder工作正常,但在global.asax我得到了以下错误:

已添加具有相同键的项目。

我可以理解两个自定义绑定中的typeof(decimal)导致此问题。

请指导并帮助我解决这个问题。

1 个答案:

答案 0 :(得分:0)

每种数据类型只能有一个模型绑定器。我不完全确定两个绑定器之间的区别,但也许您可以将它们的逻辑组合到一个模型绑定器中。如果您绝对需要两个不同的模型绑定器,那么您可能需要创建两个特定于每个模型绑定器的不同数据类型。