【发布时间】: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