ASP.NET Core 7 Razor Pages如何拼接SQL Server字段并格式化显示
实现方法
有两种常用方案可以满足你的需求,均仅用于展示,不会影响编辑等后续操作:
方案一:在模型中添加计算属性(推荐,适合多页面复用)
直接在HaloAssetNumbers模型类里添加一个只读计算属性,生成格式化后的拼接字段,同时用[NotMapped]标记告诉EF Core不要将该属性映射到数据库字段。
using System.ComponentModel.DataAnnotations.Schema; public class HaloAssetNumbers { public int Halo_Asset_Type { get; set; } public string Asset_Type_Prefix { get; set; } public int Asset_Last_Number { get; set; } // 只读计算属性,用于展示格式化后的资产编号 [NotMapped] public string FormattedAssetNumber { get { string formattedNumber = Halo_Asset_Type switch { 1 => Asset_Last_Number.ToString("D6"), // 补6位前导零 2 => Asset_Last_Number.ToString("D7"), // 补7位前导零 3 => Asset_Last_Number.ToString(), // 直接显示数值 _ => Asset_Last_Number.ToString() // 默认情况,可按需调整 }; return $"{Asset_Type_Prefix}{formattedNumber}"; } } }
之后在Razor页面(比如Index.cshtml的表格中)直接调用该属性即可:
<td>@item.FormattedAssetNumber</td>
方案二:在Razor页面中直接处理(适合单一页面临时需求)
如果不想修改模型,可直接在页面展示逻辑里编写格式化代码,例如在表格单元格中:
<td> @{ string formattedNumber; switch (item.Halo_Asset_Type) { case 1: formattedNumber = item.Asset_Last_Number.ToString("D6"); break; case 2: formattedNumber = item.Asset_Last_Number.ToString("D7"); break; case 3: formattedNumber = item.Asset_Last_Number.ToString(); break; default: formattedNumber = item.Asset_Last_Number.ToString(); break; } @($"{item.Asset_Type_Prefix}{formattedNumber}") } </td>
注意事项
- 两种方案都不会干扰编辑、新增等操作,因为拼接字段仅用于展示,未绑定表单控件或参与数据库交互。
- 脚手架生成的编辑/新增页面默认只包含模型中映射到数据库的字段,无需额外修改来排除该展示字段。
内容的提问来源于stack exchange,提问作者GlynLamb
相关产品推荐
相关产品推荐

