我必须设置一个双倍或十进制的价格。 我得到了这个错误,我已经尝试了所有我知道的。
型号:
public double price { get; set; }
控制器创建:
public ActionResult Create([Bind(Include = "ID,farmID,productID,price, URL")] ProductFarm productFarm) {
if (ModelState.IsValid) {
db.farmProducts.Add(productFarm);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.farmID = new SelectList(db.farms.OrderBy(x => x.farmName), "farmID", "farmName", productFarm.farmID);
ViewBag.productID = new SelectList(db.products.OrderBy(x => x.productName), "productID", "productName", productFarm.productID);
return View(productFarm);
}
编辑 - 添加了视图代码:
<div class="form-group">
@Html.LabelFor(model => model.price, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.price, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.price, "", new { @class = "text-danger" })
</div>
</div>
答案 0 :(得分:1)
此错误基本上是区域设置问题。您必须设置要定位到的区域设置。默认情况下,MVC脚手架将默认为您的PC文化。
您可以在web.config中设置文化
<system.web>
<globalization culture ="en-US" />
</system.web>
由于问题来自jquery validate插件,您可以安装jquery.validate.globalize
Install-Package jQuery.Validation.Globalize
告诉你如何使用它https://johnnyreilly.github.io/jQuery.Validation.Unobtrusive.Native/AdvancedDemo/Globalize.html
或者,
您可以自己扩展jquery.validate插件http://www.cedricascoop.be/blog/2011/10/22/mvc-3-problems-validating-a-decimal/
number: function (value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value); //dot separated
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value); //comma separated
}
上面的代码来自jquery.validate.js,在第1050行附近你可以看到验证。不要混淆我添加了第二个返回。我改变了返回声明。一个返回符合另一个逗号的点。