簡體   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