我正在尝试添加新的自定义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)
导致此问题。
请指导并帮助我解决这个问题。
答案 0 :(得分:0)
每种数据类型只能有一个模型绑定器。我不完全确定两个绑定器之间的区别,但也许您可以将它们的逻辑组合到一个模型绑定器中。如果您绝对需要两个不同的模型绑定器,那么您可能需要创建两个特定于每个模型绑定器的不同数据类型。