ASP.NET Core MVC 3.0 - 'EmailAddress' 数据注释导致 HTML 输出故障

ASP.NET Core MVC 3.0 - 'EmailAddress' data annotation causing HTML output glitch

创建新的 class 模型时,如果应用数据注释类型“[DataType(DataType.EmailAddress)]”或“[EmailAddress]”,我会显示原始输出在我的 HTML.

// In ~/Models/Product.cs
// using System.ComponentModel.DataAnnotations;
public class Product
{
    [DataType(DataType.EmailAddres)]
    public string Publisher { get; set; }
}

在我的 Razor HTML 中,我有:

// In ~/Views/Products/Index.cshtml
<table class="table">
    <tbody>
        @foreach (var item in Model)
        {
            // gets displayed as a literal string format instead of data from database
            <tr title="Published by: @Html.DisplayFor(modelItem => item.Publisher)"></tr>
        }
    </tbody>
</table>

例如,假设我的数据库中有 3 条记录 "Product"。 Razor HTML 代码循环遍历数据库以显示每条记录。

通过应用数据注释“[DataType(DataType.EmailAddres)]”或“[EmailAddress]”,将其转换为文字字符串似乎会产生一些奇怪的效果,这意味着不显示以正确的方式从数据库中获取数据,即“Published by: john.smith@test.com”,而是将其输出为单个衬里字符串 'john.smith@test.com > john.smith@test.com > john.smith@test.com >' 在视图中。

有人知道为什么会这样吗?

有关其他信息,我使用的是 ASP.NET 核心版本 3.0 MVC,但如果我没记错的话,它也存在于版本 2.1 中。

如果您在浏览器中查看 html 源代码,您会发现代码片段 @Html.DisplayFor(modelItem => item.Publisher) 会将字段 (EmailAddress) 呈现为超链接而不是简单文本,如下所示。

<a href="mailto:john.smith@test.com">john.smith@test.com</a>

导致 html 混乱。您可以尝试修改如下代码。

<tbody>
    @foreach (var item in Model)
    {
    <tr title="Published by: @item.Publisher">
        <td>
            @Html.DisplayFor(modelItem => item.Publisher)
        </td>

    </tr>
    }
</tbody>

测试结果