gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 4 货币字段

转载 作者:行者123 更新时间:2023-12-03 16:17:07 25 4
gpt4 key购买 nike

我的网页上的货币字段出现错误(“字段金额必须是数字”)。这是因为美元符号($50.00)。

[DataType(DataType.Currency)]
[DisplayFormat(DataFormatString = "{0:c}", ApplyFormatInEditMode = true)]
public decimal Amount { get; set; }

@Html.EditorFor(model => model.Amount)

如果我想保留美元符号,我还需要做什么?

最佳答案

默认 MVC 模型绑定(bind)器 cannot parse value formatted for display .因此,您应该编写自己的模型绑定(bind)器并将其注册为该类型(假设类型名称为 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 绑定(bind)您的自定义格式化字符串。

关于asp.net-mvc - ASP.NET MVC 4 货币字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14403803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com