关于小数点分隔符的表单验证服务器/客户端冲突

时间:2018-09-02 15:59:32

标签: asp.net-mvc model-view-controller unobtrusive-validation

我的模型:

    [Required(ErrorMessage = "Required field")]
    [Display(Name = "Price")]
    public decimal Price { get; set; }

我的观点: 有一个包含其他几个输入字段和一个价格输入字段的表单

@Html.EditorFor(model => model.Price, new { htmlAttributes = new { @class = "form-control"} })

问题:

  • [浏览器验证]如果在输入字段上插入2.3,则会显示“字段必须是数字”
  • [服务器验证]如果我在输入字段上插入2,3,则不会立即显示任何错误,但是在提交表单后,我会看到“值无效”

我尝试过的事情: 有关SO的话题很多,所以我尝试了一些建议,但不幸的是没有成功。

  • Application_Start()中的建议A- System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("pt-PT");

  • 建议B-<globalization uiCulture="pt-PT" culture="pt-PT" />放入web.config

  • 在输入字段中输入
  • 建议C-(绝望)data_val = "false"以禁用浏览器验证。当我这样做时,我发现两件事:如果我输入2.3,则0到达控制器;如果我输入2,3,则“ 2.3”(带点)的值到达控制器,但是在保存到数据库中后丢失了小数部分,我的意思是在数据库表中仅保存了“ 2”

  • 建议D-即使我在代码上强加一个逗号,当我在调试模式下检查它时,我也会看到它使用的是点并且存储在BD中仅存储“ 2”。怎么可能呢?

    成分IngredientToAdd =新成分         {             名称=成分名称,             价格= Decimal.Parse(“ 2,3”),             增值税=成分增值税         };

        if (ModelState.IsValid)
        {
            db.Ingredients.Add(ingredientToAdd);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    

0 个答案:

没有答案