2012-09-11 26 views
0

我有以下類別:顯示模板仿製藥 - 查看沒有發現

public class Widget 
{ 
    public string Name { get; set; } 
} 

GenericModel

public class GenericModel<T> 
{ 
    public List<T> Data { get; set; } 
} 

我的控制器操作是:

public ActionResult Simple() 
    { 
     var model = new GenericModel<Widget>() 
         { 
          Data = new List<Widget> 
             { 
              new Widget {Name = "a"} 
             } 
         }; 
     return View(model); 
    } 

而我的看法是:

@model MyApp.GenericModel<MyApp.Widget> 

@{ 
    ViewBag.Title = "Simple"; 
} 

<h2>Simple</h2> 
@Html.DisplayFor(m=>m) 

我有一個名爲GenericModel.cshtml在瀏覽文件/共享/ DisplayTemplate文件夾:

@model MyApp.GenericModel<MyApp.Widget> 

<ul> 
@for (int i = 0; i < Model.Data.Count; i++) 
{ 
    <li> 
    @Html.EditorFor(m=> Model.Data[i].Name) 
    </li> 
} 
</ul> 

這種觀點不能被發現。我看到當我打印出我的模型的名稱時,我會看到「GenericModel 1". Seeing that, I renamed my template "GenericModel 1.cshtml」。這似乎有點破解,有沒有更簡單的方法來找到這個顯示模板而不訴諸於此?

+0

您的視圖必須具有相同的名稱作爲您的控制器動作,除非另行指定。 – user1477388

+0

@ user1477388我的看法確實如此 - 這是我指的DisplayTemplate。 –

+0

你有沒有試過玩UIHint屬性?如果使用UIHint指向您的模板裝飾Data屬性,會發生什麼情況? –

回答

0

你必須設置在你的viewstart:

@Code 
    Layout = "~/Views/Shared/DisplayTemplate.cshtml" 
End Code 

注:以上是VB。

您還可以通過您的控制器通過這樣的:

public ActionResult Simple() 
{ 
    var model = new GenericModel<Widget>() 
        { 
         Data = new List<Widget> 
            { 
             new Widget {Name = "a"} 
            } 
        }; 
    return View("", "DisplayTemplate", model); 
} 
+0

謝謝,但這個答案解決了不同的東西 - 佈局基本上是一個母版頁。該問題沒有返回一個操作的不同視圖,問題是使用DisplayFor()。這一點很重要的原因是,當我回發到服務器時,DisplayFor或EditorFor()將呈現數據綁定模型的適當索引。 –

+1

對不起,我想我不明白這個問題。如果操作沒有顯示正確的視圖,則可以在這裏指定'View(「myView」,「MyLayout」,「MyModel」)',如果視圖不顯示正確的模型,則可以指定'@model MyApp.ModelType ' – user1477388

+0

我欣賞它的,涉及到1的組合)與模型處理結合和集合和索引時如何得到「尊貴」的通過意見的具體問題effort-- 2)如何泛型和DisplayTemplates相互關係。 –