【发布时间】:2014-06-26 16:34:34
【问题描述】:
因此,我希望小数点后面的数字作为输入比我想要的更多。
我正在使用这个模型:
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
[DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)]
public decimal Price { get; set; }
}
这是我的看法:
<div class="editor-label">
@Html.LabelFor(model => model.Price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Price)
@Html.ValidationMessageFor(model => model.Price)
</div>
似乎只是将 DisplayFormat 属性添加到 Movie.Price 不足以让用户输入像 2,79 这样的数字,如果他们尝试他们会收到验证错误。 @Html.EditorFor(model => model.Price) 创建的输入字段要求数字为 2,790(请注意小数点后面添加的额外 0)。
我尝试了各种 DataFormatStrings 但都没有效果,我错过/不理解什么?
如何调整我的代码,以便用户能够输入 2,79 而不是 2,790 作为有效输入?
【问题讨论】:
-
您绝对确定服务器使用的是正确的文化吗?看起来它试图将
,解释为千位分隔符而不是小数点。验证错误也是发生在客户端还是服务器端? -
@Ic 不,我不是,我将如何改变文化,顺便说一句,这对我来说是一个新概念。我想它发生在客户端,因为验证错误部分发生在浏览器中..
-
客户端验证可能更困难,但您可以开始查看验证规则(如果您使用不显眼的验证,则输入元素的属性)和相关的 JavaScript。至于服务器端,你可以globally set a value in web.config,或者如果你想动态地或每页地在控制器中设置
Thread.CurrentThread.CurrentUICulture/Thread.CurrentThread.CurrentCulture。不过,有人可能会提供更完整的答案。 -
@Ic 我认为文化与特定于文化的设置有关,这当然可以解决问题。但是我不需要将输入解释为货币本身,我需要将其解释为小数点后有两个数字的数字。
-
是的,但这里的问题在于默认区域性,小数点是
.而不是,(即1234 + 56/100表示为1,234.56而不是1.234,56)。您需要设置正确的文化,以便在您的格式中正确解析。
标签: c# asp.net-mvc formatting