我想创建模型绑定功能,以便用户可以输入“,”“。” 等用于绑定到我的 ViewModel 的 double 值的货币值。
我可以通过创建自定义模型绑定器在 MVC 1.0 中执行此操作,但是自从升级到 MVC 2.0 后,此功能不再起作用。
有没有人有任何想法或更好的解决方案来执行此功能?更好的解决方案是使用一些数据注释或自定义属性。
public class MyViewModel
{
public double MyCurrencyValue { get; set; }
}
一个首选的解决方案是这样的......
public class MyViewModel
{
[CurrencyAttribute]
public double MyCurrencyValue { get; set; }
}
下面是我在 MVC 1.0 中模型绑定的解决方案。
public class MyCustomModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
object result = null;
ValueProviderResult valueResult;
bindingContext.ValueProvider.TryGetValue(bindingContext.ModelName, out valueResult);
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueResult);
if (bindingContext.ModelType == typeof(double))
{
string modelName = bindingContext.ModelName;
string attemptedValue = bindingContext.ValueProvider[modelName].AttemptedValue;
string wantedSeperator = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
string alternateSeperator = (wantedSeperator == "," ? "." : ",");
try
{
result = double.Parse(attemptedValue, NumberStyles.Any);
}
catch (FormatException e)
{
bindingContext.ModelState.AddModelError(modelName, e);
}
}
else
{
result = base.BindModel(controllerContext, bindingContext);
}
return result;
}
}