ASP.NET Core页面刷新后数字格式丢失问题求助
解决ASP.NET Core 2.0 MVC中DisplayFormat刷新后格式丢失的问题
这个问题我之前也碰到过,核心是对DisplayFormat注解的作用范围理解有点偏差,咱们一步步来搞定它:
问题根源
[DisplayFormat(DataFormatString = "N2")]这个数据注解并不会直接改变decimal属性的默认ToString()行为,它是专门给ASP.NET MVC的HTML辅助方法(比如DisplayFor)设计的。你直接写@Model.MyValue的时候,其实是调用了decimal类型的默认ToString()方法——初次访问可能刚好你的值本身就是两位小数,所以看起来格式正常,但刷新后如果值的小数位数有变化,就会暴露这个问题。
解决方案
有两种简单有效的处理方式:
1. 使用Html.DisplayFor辅助方法(推荐)
这个方法会自动读取你在模型上配置的DisplayFormat注解,不管刷新多少次都能稳定保持格式:
@model MyModel <p>@Html.DisplayFor(m => m.MyValue)</p>
2. 手动指定格式字符串
如果不想用辅助方法,直接在视图里给ToString()指定格式也能解决问题:
@model MyModel <p>@Model.MyValue.ToString("N2")</p>
额外提醒
如果是表单提交后刷新页面,还要注意模型绑定的特性:decimal类型在绑定过程中会保留原始精度,DisplayFormat只负责显示层的格式化,不会修改数据本身的存储精度,所以显示层的格式化处理才是关键。
内容的提问来源于stack exchange,提问作者under
相关产品推荐
相关产品推荐

