ASP.NET MVC3无法将TextBoxFor中的十进制字段绑定到我的模型

时间:2014-01-18 15:07:11

标签: c# asp.net-mvc-3 razor model decimal

这可能是一个虚假的问题,但我遇到了一个我自己无法解决的问题。

我正在开发一个 ASP.NET MVC3 项目。出于某种原因,在特定的Create页面上,当页面经过验证时,模型上没有绑定十进制字段,我无法理解为什么。
这是我的代码:

@model ModelA

/*some TextBoxFor or others DropDownListFor, all of them working well*/

@Html.TextBoxFor(m => m.ModelB.ModelC.MyField, new { @id = "txtMyField" })

当我验证网页时,此特定字段ModelA的模型MyField已正确填充 EXCEPT 。其他字段也可以,例如:

@Html.TextBoxFor(m => m.ModelB.AnotherField, new { @id = "txtAnotherField" })

完美无缺,ModelB的其他属性已正确填充。

我的模特

ModelA包含名为ModelB的{​​{1}}类型的属性 ModelB包含名为ModelB的{​​{1}}类型的属性 ModelC包含一个名为ModelC的属性。 (我将来可能会增加一两个)。此字段是ModelC字段,没有任何DataAnnotation或任何内容。

MyField


顺便说一句,当我在浏览器的控制台中请求

decimal

它显示了良好的值,例如public decimal MyField { get; set; }


我尝试了什么

      
  • 将此十进制字段更改为浮点类型,问题是相同的。
  •   
  • 将它放在EditorFor而不是TextBoxFor中,问题是一样的。
  •   
  • 将字段MyField放在ModelB中。 ModelB的唯一属性是MyField。


为什么这个领域是反叛者?我可能做错了什么,但我无法理解......有人能解释我的错误在哪里? 谢谢!

1 个答案:

答案 0 :(得分:1)

好的,这是解决方案:

“正确”十进制值看起来像45.68,.作为分隔符 但该应用程序是非英语应用程序,分隔符必须是,。默认情况下,45,68不是正确的数字。所以我添加了这段代码:

jQuery.extend(jQuery.validator.methods, {
    number: function (value, element) {
        return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
    }
});

和45,68被认为是正确的数字。