Шаблон отображения для обобщений - представление не найдено
У меня есть следующие классы:
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 "GenericModel
1.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);
}