我的主要模型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)
的格式更改为上面的代码块?
答案 0 :(得分:2)
您需要添加自定义显示模板。添加文件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)
然后,您可以在视图中尝试使用DisplayFor
:
@Html.DisplayFor(m => m.ProjectAddress)
Razor将使用您定义的模板来呈现ProjectAddress
实例。
答案 1 :(得分:1)
查看名为“显示模板”的内容。缺点是这个..
views/shared
下创建一个名为&#39; DisplayTemplates`的新文件夹(您也可以使用编辑器模板。Address.cshtml
的新cshtml文件。将其模型设置为My.LongNamespace.Address
@model My.LongNamespace.Address
@Html.DisplayFor(model => model.Line1)
@if (!String.IsEmptyOrNull(model.Line2))
{
@Html.DisplayFor(model => model.Line2)
}
@Html.DisplayFor(model => model.City),
@Html.DisplayFor(model => model.State),
@Html.DisplayFor(model => model.ZipCode)