繁体   English   中英

如何在MVC中为用户定义的类更改Html.DisplayFor的格式

[英]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实例。

查看名为“显示模板”的内容。 缺点是这个......

  1. 您在views/shared下创建一个名为'DisplayTemplates`的新文件夹(您也可以使用编辑器模板)。
  2. 添加一个名为Address.cshtml的新cshtml文件。 将其模型设置为My.LongNamespace.Address
  3. 添加要用于“标记”地址类型的代码。

示例Address.cshtml(未经测试)

@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM