通用类型的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")