Asp.net-Mvc

帶有 UIHint 的 ASP.NET MVC 3 自定義顯示模板 - 需要 For 循環嗎?

  • April 16, 2014

如果我有這樣的ViewModel

public class MyViewModel
{
  [UIHint("SomeTemplate")]
  public ICollection<SomeViewModel> Submodel { get; set; }
}

還有一個帶有這樣一行 HTML的強類型視圖:

@Html.DisplayFor(model => model.Submodel)

還有一個帶有這樣簽名的顯示模板:

@model MvcApplication1.Models.SomeViewModel

我收到一條錯誤消息,提示“模型項是類型List<SomeViewModel>,但此字典需要類型的模型SomeViewModel。”。

這是有道理的,但我希望 MVC 的內置模板智能能夠發揮作用,看到它是一個IEnumerable東西,並努力呼叫我的模板 N 次,就像它通常在Html.DisplayFor沒有提示的情況下所做的那樣。

所以它看起來像[UIHint]覆蓋了那個功能?

顯然,我可以指向另一個接受集合和呼叫的模板Html.DisplayForModel(),基本上模擬 MVC 智能。但我希望避免這種情況。老實說,我寧願做一個 foreach 循環,也不願擁有那 1 行“包裝器”模板。

有更好的想法嗎?

就像我想說:“嘿 MVC,為這些人中的每個人渲染一個模板。但不是使用名稱約定來查找模板,這裡有一個提示”。

UIHint 的意思是“使用名為 XXX 的模板渲染這個模型”。所以你必須聲明你的顯示模板“SomeTemplate”

@model MvcApplication1.Models.ICollection<SomeViewModel>

並在 foreach 中顯示每個項目。

另一種方法是傳遞字元串模板名稱,如下所示

@Html.DisplayFor(model => model.Submodel, "SomeTemplate")

引用自:https://stackoverflow.com/questions/6093759