2017-03-01 55 views
0

我對此有點困惑。 我穿越到視圖頁面視圖模型包含兩個屬性:在foreach循環中使用Html.Display和Html.DisplayFor在剃刀視圖中顯示覆合模型項目

public class UserProfileViewModel 
{ 
    public ApplicationUser userProfile { get; set; } 
    public AddressViewModel userAddress { get; set; } 
} 

的AddressViewModel本身包含一個列表,其項目我想查看頁面中顯示:

public class AddressViewModel 
{ 
    public int ID { get; set; } 
    ...... 
    public virtual List<GeoData> GeoDataList { get; set; } 
} 

呼我嘗試這對Wiew頁

@model MySite.ViewModels.UserProfileViewModel 
... 
@foreach (var item in Model.userAddress.GeoDataList) 
     { 
     <dd> 
      @Html.DisplayFor(modelitem => item.PlaceName) 
     </dd> 
    } 

我得到正確的結果exptected 但是,當我試圖表明的複合結果,我需要

@foreach (var item in Model.userAddress.GeoDataList) 
     { 
      <dd> 
       @Html.DisplayFor(modelitem => (item.PlaceName + ", " + item.PostalCode + ", " + item.Latitude + ", " + item.Longitude)) 
      </dd> 
     } 

我得到以下異常:

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions. 

而當我試試這個:

@foreach (var item in Model.userAddress.GeoDataList) 
     { 
      <dd> 
       @Html.Display(item.PlaceName + ", " + item.PostalCode + ", " + item.Latitude + ", " + item.Longitude) 
      </dd> 
     } 

我沒有得到任何的異常,並在所有(空白頁)沒有結果。

這是爲什麼?

+0

它只是'

@ item.PlaceName, @ item.PostalCode,....'(或'
@ Html.DisplayFor(m => item.PlaceName),@ Html.DisplayFor(m => item.PostalCode),....' –

+0

而且你沒有使用@ Html.Display獲取輸出(item.PlaceName +「,」+ item.PostalCode ...',因爲您的模型不包含與連接這些值所生成的名稱相同的屬性 –

回答

0

您需要GeoData類的顯示模板。顯示模板是控制器文件夾或Shared中DisplayTemplates子文件夾中稱爲GeoData.cshtml的局部視圖。你的地理數據將是這樣

@model MySite.ViewModels.GeoData @ Model.PlaceName,@ Model.PostalCode,@ Model.Latitude,@ Model.Longitude

和你的用戶配置頁面的代碼一樣

<dd> 
    @Html.DisplayFor(modelitem => item) 
</dd> 
2

可以使用@Html.Raw它顯示的結果沒有任何HTML編碼

@foreach (var item in Model.userAddress.GeoDataList) 
     { 
      <dd> 
       @Html.Raw(item.PlaceName + ", " + item.PostalCode + ", " + item.Latitude + ", " + item.Longitude) 
      </dd> 
     } 
+0

Thanks Usman,first建議有效,而第二個則不行。仍然想知道爲什麼與@ Html.Display(item.PlaceName)我既沒有例外也沒有結果。 – Luke

+0

你不需要'Html.Raw()'而第二個不能工作! –

+0

當stephen在註釋@ Html.Display中對其進行了擴展時,它適用於模型屬性,在這裏您的字符串不匹配任何模型 – Usman

相關問題