我的主要模型 Project 有一个名为“ProjectAddress”的属性,它属于“Address”类型——我定义的一个类。地址具有属性 Line1、Line2、City、State 和 ZipCode。当我使用 @Html.DisplayFor(model => model.ProjectAddress)
时,它显示为:
Line 1
<Line1 value here>
Line 2
<Line2 value here>
City
<City value here>
...
等等。我希望它显示为:
<Line 1>
<Line 2 if defined>
<City>, <State>, <ZipCode>
<County> County
没有每个值上方的属性标题。每次我想通过硬编码显示地址时,我都可以手动执行此操作
@Html.DisplayFor(model => model.ProjectAddress.Line1)
@if (!String.IsEmptyOrNull(model.ProjectAddress.Line2))
{
@Html.DisplayFor(model => model.ProjectAddress.Line2)
}
@Html.DisplayFor(model => model.ProjectAddress.City), @Html.DisplayFor(model => model.ProjectAddress.State), @Html.DisplayFor(model => model.ProjectAddress.ZipCode)
但这非常乏味,如果我出于任何原因更改地址类的格式,我将不得不检查我的代码并更改它的每个实例。有没有办法可以将 @Html.DisplayFor(model => model.ProjectAddress)
的格式更改为上面的代码块?
最佳答案
您需要添加自定义显示模板。添加文件 Views\Shared\DisplayTemplates\Address.cshtml
,并将以下代码放入其中:
@model Namespace.To.Address
@Html.DisplayFor(m => m.Line1)
@if (!String.IsEmptyOrNull(Model.Line2))
{
@Html.DisplayFor(m => m.Line2)
}
@Html.DisplayFor(m => m.City), @Html.DisplayFor(m => m.State),
@Html.DisplayFor(m => m.ZipCode)
然后,您可以像最初在 View 中尝试的那样使用 DisplayFor
:
@Html.DisplayFor(m => m.ProjectAddress)
Razor 将使用您定义的模板来呈现 ProjectAddress
实例。
关于c# - 如何更改 MVC 中用户定义类的 Html.DisplayFor 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44392352/