加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – MVC3在编辑时,十进制截断为2位小数

发布时间:2020-12-15 18:37:23 所属栏目:asp.Net 来源:网络整理
导读:我正在使用Razor运行MVC3,并注意到在编辑模式时,十进制值被截断为2位小数。我已经设法通过使用显示格式注释我的属性来绕过它。这似乎不是一个很好的解决方案,因为我必须记住为每个生成的新视图(或更新我的模板)这样做。 我检查了我们的服务返回给控制器的
我正在使用Razor运行MVC3,并注意到在编辑模式时,十进制值被截断为2位小数。我已经设法通过使用显示格式注释我的属性来绕过它。这似乎不是一个很好的解决方案,因为我必须记住为每个生成的新视图(或更新我的模板)这样做。

我检查了我们的服务返回给控制器的值,它在1.144是正确的,但是当绑定到视图它出来作为1.14在TextBox

ViewModel属性

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

.cshtml代码

@Html.LabelFor(model => model.UnitPrice) 
@Html.EditorFor(model => model.UnitPrice) 
@Html.ValidationMessageFor(model => model.UnitPrice)

如果我用以下方式来装饰房产,那么它是有效的。

[DisplayFormat(
               ApplyFormatInEditMode = true,DataFormatString = "{0:0.00###########################}",NullDisplayText = "")]

有任何想法吗?

解决方法

这就是默认的 Decimal editor template is defined:
<%@ 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" }) %>

注意{0:0.00}格式。

所以你有两种可能性:

>在模型中使用double而不是decimal作为类型
>通过创建自定义?/ Views / Shared / EditorTemplates / Decimal.cshtml来修改默认编辑器模板,这可能只是这样:

@Html.TextBox(
    "",ViewData.TemplateInfo.FormattedModelValue,new { @class = "text-box single-line" }
)

您可能还需要修改显示模板。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读