Шаблон отображения для обобщений - представление не найдено

У меня есть следующие классы:

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 в папке Views/Shared/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>

Этот вид не может быть найден. Я вижу, когда я распечатываю название типа моей модели, я получаю "GenericModel1". Seeing that, I renamed my template "GenericModel1.cshtml ". Это похоже на хак, есть ли более простой способ найти этот шаблон отображения, не прибегая к этому?

1 ответ

Вы должны установить это в вашем 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);
}
Другие вопросы по тегам