【问题标题】:Looking for a way to implement a polymorphic view in ASP.NET Core寻找一种在 ASP.NET Core 中实现多态视图的方法
【发布时间】:2019-09-25 05:29:57
【问题描述】:
我正在开发一个 ASP.NET MVC Core Web 应用程序,它会有很多类似的视图。每个视图只是一个简单的表单,其中包含标签和控件对列表。
已构建“对象”编辑器模板,以便根据视图模型属性自动生成此类视图的内容。
每个视图基本上只有一行代码:
@Html.EditorFor(m => m)
每个视图模型都派生自一个基类。
有没有办法摆脱重复的视图和控制器操作?
理想情况下,我希望只有一个视图,其中模型是基本模型类,以及一个接收该基本模型的控制器操作。
【问题讨论】:
标签:
asp.net
model-view-controller
polymorphism
【解决方案1】:
Himanshu 的评论引导我将 Partials 用于子类,并使用基类作为主视图的模型。您也许可以根据给定的模型使用反射/属性注释来填充视图,尽管我没有尝试过。
我成功尝试的是使用非抽象的基类,因此不会在子类中复制属性,然后使用泛型,如...
List<T> GetChildClasses<T>() where T : BaseClass;
由控制器方法调用并提供视图模型,然后像这样显示......
@model MyApp.Models.BaseClass
<div class="show_base_class_properties_here">
</div>
@if(Model is ChildClass)
{
@await Html.PartialAsync("_ChildPartial", Model);
}
<div class="whatever_comes_next">
</div>
我怀疑有更好的方法,但这可行。显然在一个视图文件中只能有一个@model。