关于 mvc 模板和泛型有一些问题,但似乎与我正在寻找的内容无关。考虑以下模型:
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>() })
}
}
Razor 视图 Views/Home/Index.cshtml 如下所示:
@model MyNamespace.MyViewModel
@Html.EditorFor(m => m.Data)
那里没什么特别的。如果我想要一个显示或编辑器模板,我可以在 Views/Shared/EditorTemplate 或 Views/Home/EditorTemplates 下创建一个名为 MyModel.cshtml 的文件,它会正确找到它。
如果我想在显示列表时为 ModelBase 的每个实现做一些不同的事情怎么办?Mvc 取景器将在上述任何路径中正确找到 List'1.cshtml 模板。但是我需要做的是为 List`1[MyModel].cshtml 做一个模板
我似乎无法获得正确的文件命名。到目前为止我尝试过的(相对于这个示例命名):
- 列表`1[MyModel].cshtml
- 列表`1[[MyModel]].cshtml
- 列表`1[MyNamespace.MyModel].cshtml
- 列表`1[[MyNamespace.MyModel]].cshtml
如果可能的话,我想避免编写自定义取景器。如果我不能让上面的东西工作,我现在能想到的唯一选择就是让 List`1.cshtml 调用一个从 List 推导出命名的部分。