[英]How to change formatting of Html.DisplayFor for a user-defined class in MVC
我的主要模型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)
然后,您可以在视图中尝试使用DisplayFor
:
@Html.DisplayFor(m => m.ProjectAddress)
Razor将使用您定义的模板来呈现ProjectAddress
实例。
查看名为“显示模板”的内容。 缺点是这个......
views/shared
下创建一个名为'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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.