Было несколько вопросов относительно шаблонов и дженериков mvc, но, похоже, ничто не связано с тем, что я ищу. Рассмотрим следующие модели:MVC3 Редактор бритвы/Шаблоны и генераторы шаблонов
namespace MyNamespace
{
public class ModelBase { /* Not important for example */ }
public class MyModel : ModelBase
{
public string Name { get; set; }
}
public class MyViewModel
{
public IEnumerable<ModelBase> Data { get; set; }
}
}
и контроллер:
public class HomeController : Controller
{
public ActionResult Index
{
return View(new MyViewModel { Data = new List<MyModel>() })
}
}
бритвой посмотреть просмотров/Главная/Index.cshtml будет выглядеть так:
@model MyNamespace.MyViewModel
@Html.EditorFor(m => m.Data)
Ничего особенного там. Если мне нужен шаблон отображения или редактора, я могу создать файл в разделе Views/Shared/EditorTemplate или в разделе Views/Home/EditorTemplates под названием MyModel.cshtml и он найдет его правильно.
Что делать, если я хочу сделать что-то другое для каждой реализации ModelBase при показе списка? Mvc viewer найдет шаблон List'1.cshtml правильно в любом из указанных выше путей. Однако мне нужно сделать шаблон для List`1 [MyModel] .cshtml
Я не могу найти правильное имя файла. То, что я пытался до сих пор (по отношению к этому примеру именования):.
- List`1 [MyModel] .cshtml
- List`1 [[MyModel]] cshtml
- List`1 [MyNamespace .MyModel] .cshtml
- List`1 [[MyNamespace.MyModel]]. cshtml
Если это возможно, я хочу, чтобы избежать написания пользовательских видоискатель. Единственная альтернатива, о которой я могу сейчас думать, если я не могу получить выше работы для работы, - это просто, чтобы List`1.cshtml вызывал частичное с наименованием, выведенным из списка.
В конце концов я сделал быстрые и грязные решения, где шаблон List'.cshtml обрабатывает весь список в Views \ Home. Он вручную компилирует имя шаблона из общего и содержащегося типа и вызывает это как частичное, передавая модель. Не гордитесь этим, а только решениями, о которых я могу думать. Любое предложение сделать это «правильно» приветствуется. Таким образом, я закончил с шаблонами с именем List' [MyModel] .cshtml и тому подобное. –