デフォルトのMVCモデルバインダーcannot parse value formatted for display。ああ
ModelBinders.Binders.Add(typeof(Foo), new FooModelBinder());
、そして最後:
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のタイプのために、このバインダーを追加:だから、あなたはあなた自身のモデルバインダーを書いて、このタイプのためにそれを登録する必要があります(と仮定するタイプ名はFooのです)事 - 量のテキストボックス(そうしないと、それは数ではありませんメッセージを見ていきます)からdata-val-number
属性を削除:
$("#Amount").removeAttr("data-val-number");
今、あなたは検証エラーmessagを取得しますe入力値が正しい通貨量(たとえば、 $10F.0
)。
ところで、私はそれがMVCカスタムフォーマットされた文字列をバインド支援するために、すべてのこのようなものを実装するよりも、ApplyFormatInEditMode = false
を使用する方が良いと思います。
現在のカルチャ –