MVCPartialView多态ViewModel集合和渲染我在一个MVC应用中遇到了ViewModel的多态集合的问题。我通过网络服务调用收到了这个,我需要遍历它们并根据对象类型为它们提供自己的局部视图。公共抽象类ProvinceViewModel{公共字符串代码{得到;放;}}publicsealedclassOntarioViewModel:ProvinceViewModel{}publicsealedclassQuebecViewModel:ProvinceViewModel{}在我看来,我正在尝试迭代它们并分配部分视图。我必须在这里做很多类型转换才能让它工作。如果我尝试将其移至控制器操作并传入抽象类型,则会出现错误,提示我们无法创建抽象类的实例。ICollectionProvinceList;//集合通过服务接收@for(inti=0,c=ProvinceList.Count;ix.Name=="View");if(partialAttr==null)thrownewException(modelType.Name+"doesn'tdefineanyviewtobeused");varpartialName=(prefix??String.Empty)+partialAttr.Value;返回htmlHelper.Partial(partialName,model,htmlHelper.ViewData);然后使用它:@Html.Partial(currentProvince);如果您的部分位于某个子目录中:@Html.Partial(currentProvince,"Partials/")(如果您需要帮助注册自定义HTML帮助程序,请参阅https://stackoverflow.com/a/5052790)您可以使用显示模板来做到这一点。在Controller的Views目录中的DisplayTemplates文件夹中为每种类型创建一个显示模板:+--Views+--Provinces+--DisplayTemplates+--OntarioViewModel.cshtml+--QuebecViewModel.cshtmlUsingDisplayForHelpinViewsDisplayerforeachmodel:@modelICollection@foreach(varprovinceinModel){@Html.DisplayFor(_=>province)}我有类似的要求,这就是我设法解决它的方法。我的视图模型(BusinessEventEmailViewModel)有一个接口列表(IBusinessEventEmail),它在运行时使用unity解析。IBusinessEventEmail有一个EventCode属性。公共类BusinessEventEmailViewModel:MailHeaderViewModel{#regionmemberspublicListEvents{get;放;在我看来,我使用命名约定呈现部分视图:Html.RenderPartial("~/Views/Shared/Email/_"+businessEvent.EventCode+".cshtml",businessEvent);然后,我有一个实现了IBusinessEventEmail的XXXEventEmail,EventCode为XXX,分部视图_XXX.cshtml以上就是C#学习教程的全部内容:MVC分部视图中的多态ViewModel收集与渲染分享,如果对大家有用,需要的了解有关C#学习教程的更多信息。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: