【问题标题】:double and decimal not working双精度和十进制不起作用
【发布时间】:2015-12-22 19:30:10
【问题描述】:

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

型号:

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>

【问题讨论】:

  • 您的服务器是否使用逗号作为小数点分隔符,而不是点?
  • 您应该始终使用 十进制 表示金额。
  • 向我们展示价格字段的查看代码。一定是类型错误
  • 什么逗号和点.. 服务器来自丹麦,所以我是一个逗号.. 我能得到有关如何解决这个问题的提示吗?
  • @WannaBeACoder jquery 负责,使用github.com/jquery/globalize 修复该问题

标签: c# asp.net-mvc


【解决方案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 行,你可以看到验证。不要混淆我添加了第二个返回。我切换了return语句。一个返回验证 dot 另一个用于逗号。

【讨论】:

  • 感谢您的回答,但我无法使其正常工作。我已关注链接但仍无法正常工作:/
  • 把它放在你的 web.config 文件中
  • 一定是语言环境错误。既然你说了一些关于丹麦的事。我认为您的语言环境是丹麦设置。否则你的代码没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 2014-02-07
  • 1970-01-01
  • 2017-02-27
相关资源
最近更新 更多