默認MVC模型綁定器cannot parse value formatted for 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");
現在你會得到驗證錯誤messag e如果輸入值不是正確的貨幣量(例如, $10F.0
)。
BTW我認爲這是更好地使用ApplyFormatInEditMode = false
不是執行所有這些東西來幫助MVC綁定您的自定義格式的字符串。
它可能取決於當前的文化 –