ASP.NET MVC中如何移除金额字段美元符号或替换为Rs.且不改动数据库
解决ASP.NET MVC中Decimal金额显示美元符号的问题
嘿,我明白你的困扰——用DataType.Currency后默认显示美元符号,但你想要换成Rs.或者直接去掉,还不能影响数据库里的数据对吧?别担心,这几个方法都能搞定,而且都是在显示层处理,完全不会碰数据库里的decimal值:
方案1:在模型上直接指定显示格式(推荐,统一管理)
你可以给Amount字段加上DisplayFormat属性,自定义显示格式,甚至可以保留DataType(Currency)或者直接替换它:
换成Rs.符号的写法
[Required] [DisplayFormat(DataFormatString = "Rs. {0:N2}", ApplyFormatInEditMode = false)] [Column(TypeName = "decimal(10, 2)")] public decimal Amount { get; set; }
{0:N2}表示保留两位小数的数字格式,前面加上Rs.就会显示成Rs. 1234.56ApplyFormatInEditMode = false很重要:这样编辑页面里不会带Rs.符号,用户输入纯数字就能正确绑定到decimal字段,完全不影响数据库更新
直接去掉符号的写法
如果只是想显示纯数字加两位小数,用这个:
[Required] [DisplayFormat(DataFormatString = "{0:N2}", ApplyFormatInEditMode = false)] [Column(TypeName = "decimal(10, 2)")] public decimal Amount { get; set; }
这样会显示成1234.56,没有任何货币符号
方案2:在视图里手动格式化(灵活,适合局部调整)
如果不想改模型,直接在视图里修改输出格式就行,把原来的DisplayFor替换成手动格式化:
换成Rs.符号
<td>@string.Format("Rs. {0:N2}", item.Amount)</td>
去掉符号
<td>@item.Amount.ToString("N2")</td>
这种方法更直接,不需要改动模型代码,适合只在某个页面需要调整的场景
方案3:全局设置区域(适合整个应用都用印度货币)
如果你的整个应用都需要显示Rs.作为货币符号,可以全局设置应用的区域为印度(hi-IN),这样所有DataType(Currency)的字段都会自动显示Rs.:
ASP.NET Core(Program.cs)
var builder = WebApplication.CreateBuilder(args); // 添加区域设置 builder.Services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new[] { "hi-IN" }; options.SetDefaultCulture(supportedCultures[0]) .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures); }); var app = builder.Build(); app.UseRequestLocalization(); // 启用区域设置 // 其他中间件...
ASP.NET MVC(Global.asax)
protected void Application_Start() { // 其他配置... System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("hi-IN"); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("hi-IN"); }
注意:这个是全局生效的,会影响所有日期、数字、货币的显示格式,要根据你的需求来用
不管用哪个方案,核心都是:我们只是对decimal值做显示层的格式化,数据库里存储的依然是原始的decimal数值,更新时模型绑定会自动处理纯数字输入,完全不会改变数据库里的数据。
内容的提问来源于stack exchange,提问作者krishna mohan
相关产品推荐
相关产品推荐

