c# - 如何更改 MVC 中用户定义类的 Html.DisplayFor 格式

标签 c# asp.net-mvc razor

我的主要模型 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/

相关文章:

c# - EntityFramework.dll 中出现类型为 'System.InvalidOperationException' 的异常,但在注册时未在用户代码中处理

c# - MVC4 WebGrid 和 Ajax 分页

c# - 可以从 firefox 和 chrome 下载文件,但不能在 IE 中下载文件

html - CSS float 和文本对齐仅作为内联使用

c# - 如何填充字符串的类列表?

c# - 获取屏幕比例

非泛型类中的 C# 协方差

asp.net-mvc - 使用 Entity Framework 6 和 ViewModel 从数据库表中填充 ASP.NET MVC 中的 DropDownList

razor - 为什么 Razor 看不到包含的命名空间?

c# - 获取代理对象的底层类型