0

我有以下课程:

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

通用模型

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 "GenericModel1.cshtml”。这似乎有点像黑客,有没有更简单的方法来找到这个显示模板而不诉诸于此?

4

1 回答 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);
}
于 2012-09-11T13:24:55.223 回答