double和decimal不工作

时间:2015-12-22 19:30:11

标签: c# asp.net-mvc

我必须设置一个双倍或十进制的价格。 我得到了这个错误,我已经尝试了所有我知道的。

enter image description here

型号:

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>

1 个答案:

答案 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行附近你可以看到验证。不要混淆我添加了第二个返回。我改变了返回声明。一个返回符合另一个逗号的点。