存储为 Varchar(9) 的 SSN 的 Razor 页面显示模板

Razor Page Display Template for SSN stored as a Varchar(9)

我正在尝试显示存储为带有破折号的 Varchar(9) 的 SSN。

数据库中的 SSN 存储为 varchar(9),没有破折号。它不存储为数字,因为如果它存储为数字,任何前导零都会被删除。我不能将 DisplayFormat 属性与 DataFormatString = "{0:###-##-####}" 一起使用,因为这似乎只有在 SSN 存储为 Long 类型时才有效。所以,我正在尝试为其创建一个显示模板。我创建了一个名为 SSN 的 .cshtml 文件,并将其放在共享文件夹内名为 DisplayTemplates 的文件夹中,我在 Razor 页面上使用 @Html.DisplayFor(modelItem => item.SSN) 来显示 SSN ,但是我在显示模板中创建的遮罩没有生效。

这是 SSN.cshtml 显示模板中的代码:

@model PFDTrustDomain.Client

<div>
    @Model.SSN.Insert(2, "-").Insert(5, "-");
</div>

我希望 SSN 显示为:123-45-6789,但继续显示为:123456789。

显示模板未命中,需要通过设置Copy to Output Directory将模板复制到输出文件夹。

按照以下步骤操作:

  1. @Html.DisplayFor@model PFDTrustDomain.Client 不匹配,模板预期为客户端,但您通过 SSN 传递字符串。将 @Html.DisplayFor 更改为 @Html.DisplayFor(model => model.SSN,"SSN")
  2. 将模板中的 @model PFDTrustDomain.Client 更改为以下

    @model string
    
    <div>
        @Model.Insert(3, "-").Insert(6, "-");
    </div>
    
  3. Shared/DisplayTemplates/SSN.cshtmlCopy to Output Directory 设置为 Copy always

我发现了这个问题(在我导师的明智帮助下)。除了按照 madreflection 的建议将字符位置更改为 3 和 6 之外,还需要将字符串 "Name of display template" 添加到 .cshtml 文件的 DisplayFor 方法中,如下所示:

    <td>
        @Html.DisplayFor(modelItem => item.SSN, "SSN")
    </td>