Cra*_*aig 26 asp.net-mvc razor asp.net-mvc-3
我正在使用Razor运行MVC3并注意到在编辑模式下十进制值被截断为2位小数.我已经设法通过用显示格式注释我的属性来绕过它.这似乎不是一个非常好的解决方案,因为我必须记住为我生成的每个新视图(或更新我的模板)执行此操作.
我已经检查了我们的服务返回给控制器的值,它在1.144是正确的,但当绑定到视图时,它在TextBox中显示为1.14
ViewModel属性
[Required]
[Display(Name = "Unit Price")]
public decimal UnitPrice { get; set; }
Run Code Online (Sandbox Code Playgroud)
.cshtml代码
@Html.LabelFor(model => model.UnitPrice)
@Html.EditorFor(model => model.UnitPrice)
@Html.ValidationMessageFor(model => model.UnitPrice)
Run Code Online (Sandbox Code Playgroud)
如果我使用以下内容装饰该属性,那么它的工作原理.
[DisplayFormat(
ApplyFormatInEditMode = true,
DataFormatString = "{0:0.00###########################}",
NullDisplayText = "")]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Dar*_*rov 32
这就是默认的Decimal编辑器模板的定义方式:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script runat="server">
private object ModelValue {
get {
if (ViewData.TemplateInfo.FormattedModelValue == ViewData.ModelMetadata.Model) {
return String.Format(
System.Globalization.CultureInfo.CurrentCulture,
"{0:0.00}", ViewData.ModelMetadata.Model
);
}
return ViewData.TemplateInfo.FormattedModelValue;
}
}
</script>
<%= Html.TextBox("", ModelValue, new { @class = "text-box single-line" }) %>
Run Code Online (Sandbox Code Playgroud)
注意{0:0.00}
格式.
所以你有两种可能性:
double
而不是decimal
类型通过创建自定义~/Views/Shared/EditorTemplates/Decimal.cshtml
来修改默认编辑器模板,该自定义可能如下所示:
@Html.TextBox(
"",
ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line" }
)
Run Code Online (Sandbox Code Playgroud)您可能也想修改显示模板.
IMO,这篇文章有一个更好的选择:
我使用此代码在EditFor中显示最多4位小数:
[Display(Name = "Discount Percentage")]
[Range(0, 100.0)]
[DisplayFormat(DataFormatString="{0:0.0000}", ApplyFormatInEditMode=true)]
public Decimal? DiscountPercent { get; set; }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25484 次 |
最近记录: |