Generics的显示模板 - 找不到视图

时间:2012-09-11 13:09:35

标签: asp.net-mvc-3 display-templates

我有以下课程:

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)

我在Views / Shared / DisplayTemplate文件夹中有一个名为GenericModel.cshtml的文件:

@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”。这看起来有点像黑客,是否有更简单的方法来找到这个显示模板而不诉诸于此?

1 个答案:

答案 0 :(得分: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);
}