默认 MVC 模型绑定器无法解析格式化为 display 的值。因此,您应该编写自己的模型绑定器并将其注册为该类型(假设类型名称为 Foo):
public class FooModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var result = bindingContext.ValueProvider.GetValue("Amount");
if (result != null)
{
decimal amount;
if (Decimal.TryParse(result.AttemptedValue, NumberStyles.Currency, null, out amount))
return new Foo { Amount = amount };
bindingContext.ModelState.AddModelError("Amount", "Wrong amount format");
}
return base.BindModel(controllerContext, bindingContext);
}
}
在 Application_Start 处为 Foo 类型添加此活页夹:
ModelBinders.Binders.Add(typeof(Foo), new FooModelBinder());
啊,最后一件事 -data-val-number
从金额文本框中删除属性(否则您将继续看到它不是数字的消息):
$("#Amount").removeAttr("data-val-number");
现在,如果输入值不是正确的货币金额(例如$10F.0
),您将收到验证错误消息。
顺便说一句,我认为使用它ApplyFormatInEditMode = false
比实现所有这些东西来帮助 MVC 绑定您的自定义格式化字符串更好。