0

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

数据库中的 SSN 存储为 varchar(9),没有破折号。它不存储为数字,因为如果将其存储为数字,则会删除任何前导零。我不能将 DisplayFormat 属性与 DataFormatString = "{0:###-##-####}" 一起使用,因为这似乎仅在 SSN 存储为 Long 类型时才有效。所以,我正在尝试为它创建一个显示模板。我创建了一个名为 SSN 的 .cshtml 文件并将其放置在 Shared 文件夹内的一个名为 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。

4

2 回答 2

0

对于显示模板未命中,您需要通过设置将模板复制到输出文件夹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. 设置Copy to Output DirectoryShared/DisplayTemplates/SSN.cshtml_Copy always

于 2019-09-09T05:08:49.793 回答
-1

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

    <td>
        @Html.DisplayFor(modelItem => item.SSN, "SSN")
    </td>
于 2019-09-09T17:59:31.660 回答