【问题标题】:ASP.NET Core MVC 3.0 - 'EmailAddress' data annotation causing HTML output glitchASP.NET Core MVC 3.0 - 'EmailAddress' 数据注释导致 HTML 输出故障
【发布时间】:2019-12-20 07:23:03
【问题描述】:

在创建新的类模型时,如果您应用数据注释类型“[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 条记录。 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 Core 3.0 MVC,但如果我记得,这也存在于 2.1 版中。

【问题讨论】:

  • 您可能在行尾有错误的返回字符。 Windows 使用 0x0D,然后使用 0x0A。您的电子邮件只有 0x0D,这可能意味着它来自 Linux。
  • DisplayFor 返回带有电子邮件类型的实际 HTML 锚标记(即链接)。这在 HTML 属性中是无效的,导致 HTML 中断。如果您想要的只是电子邮件地址字符串本身,只需直接打印(即@item.Publisher),而不是使用Html.DisplayFor
  • 好的,这绝对突出了这个问题。不知道通过添加数据注释 [EmailAddress] 会导致它生成一个电子邮件地址字符串。我最初认为它将该数据库属性注册为数据库端的电子邮件字符串,而不是整个程序。

标签: c# html razor asp.net-core-mvc data-annotations


【解决方案1】:

如果您在浏览器中查看 html 源代码,您会发现代码 sn-p @Html.DisplayFor(modelItem =&gt; 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>

测试结果

【讨论】:

  • 啊,好吧,这很有意义,有助于理清问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
相关资源
最近更新 更多