我有 Class ,如下所示
Lamba expression
并在查看中,我引用顶部的模型
并使用 @Html.TextBoxFor(n => n.Transaction.ProductName )
@Html.TextBoxFor(n => n.Transaction.ProductPrice )
创建输入
1.11
当我将240,000
输入到产品价格中时,一切正常,
但如果我输入ModelState is not valid
{{1}}
为什么?这样做的正确方法是什么?如何创建仅处理价格的文本框?没有文字输入?
答案 0 :(得分:1)
尝试为decimal数据类型实现自定义模型绑定器,它将根据您当前的文化分析十进制值:
public class PriceModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
ModelState modelState = new ModelState { Value = value };
decimal result = 0.0M;
if (!decimal.TryParse(value.AttemptedValue, NumberStyles.Currency, CultureInfo.CurrentCulture, out result))
modelState.Errors.Add(new FormatException("Price is not valid"));
return result;
}
}
答案 1 :(得分:0)
看起来您的问题可能是“240,000”中的逗号。您有两种选择:
(a)仅将文本框限制为数字字符
@Html.TextBoxFor(n => n.TransactionProductPrice, new { type = "number" })
(b)将ProductPrice的类型更改为字符串,然后使用逗号分析字符串,将数字分隔为控制器端的小数(请参阅此question以获取帮助)
var allowedStyles = (NumberStyles.AllowDecimalPoint & NumberStyles.AllowThousands);
var price = Decimal.Parse(viewmodel.TransactionProductPrice, allowedStyles);
答案 2 :(得分:0)
尝试将您的(逗号)更改为。(点)
在c#中,它使用。(点)表示十进制值(不是类型,实际十进制值)
而是使用字符串格式将您的值从2016000.5转换为2 016 000,5或2,016,000.5(如果这是您正在寻找的)