首页 文章

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

提问于
浏览
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)

我在 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

    您必须在 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);
    }
    

相关问题