通用类型的ASP.NET MVC显示模板

我试图使用模型ListModel作为通用列表模型。 我想进入页面

@Html.DisplayForModel() 

但是MVC没有正确找到模板文件“ListModel.cshtml”。 它必须对通用模型有不同的作用。 我应该为模板化文件命名,以便正确定位?

 public class ListModel { public IEnumerable Models { get; set; } public string NextPage { get; set; } } 

我希望它能找到Shared/DisplayTemplates/ListModel.ascx但事实并非如此。 有人知道吗?

编辑:

我最后通过简单地删除generics参数来解决这个问题。 我想知道你是否仍然可以拥有通用文件名。

 public class ListModel { public IEnumerable Models {get;set;} public string NextPage {get;set;} } 

作为一种解决方法,您是否可以使用UIHint属性修饰ListModel类以强制它使用您想要的模板?

例如,

 [UIHint("ListModel")] public class ListModel { ... 

我不认为这是可能的。

想一想:如果你能够以某种方式将模板声明为通用(例如通过调用它,可以通过调用ListModel`1.ascx或其他东西),MVC运行时将如何处理模型的任何特定实例? 您将如何在模板中显示通用属性/字段?

我无法找到一个MS特别声明不允许使用通用模型的地方,但我看不出它们是如何使它工作的。

观察也支持这一点,如果您尝试创建强类型视图,则会从下拉框中过滤掉generics类。

您可以明确指定您的模板,然后MVC会像往常一样找到它。

 @Html.DisplayForModel("ListModel") 

和类似的

 @Html.DisplayFor(m=>m.AProperty,"TemplateName")