.NET Framework Partial View模型类型不匹配错误解决咨询
问题描述
主视图使用的模型:
@model MGDanismanlik.Controllers.SettingsController.WorkCampClas
在主视图底部调用局部视图:
@Html.Partial("MonthlyResultPartial")
局部视图要求的模型:
@model IEnumerable<MGDanismanlik.Controllers.SettingsController.WorkCampaignResultClass>
运行时触发错误:
The model item passed into the dictionary is of type 'MGDanismanlik.Controllers.SettingsController+WorkCampClas', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MGDanismanlik.Controllers.SettingsController+WorkCampaignResultClass]'
问题原因
调用@Html.Partial时如果不明确指定模型,ASP.NET MVC会自动将主视图的当前模型传递给局部视图。但主视图模型是WorkCampClas类型,和局部视图要求的IEnumerable<WorkCampaignResultClass>类型完全不兼容,因此抛出类型不匹配的异常。
解决方法
方法1:扩展主视图模型并传递对应属性
- 在
WorkCampClas类中添加类型为IEnumerable<WorkCampaignResultClass>的属性:
public class WorkCampClas { // 原有属性保留 public IEnumerable<WorkCampaignResultClass> MonthlyResults { get; set; } }
- 在控制器的Action中,为该属性赋值(从数据库或数据源获取对应数据)。
- 修改局部视图调用代码,明确传递该属性作为模型:
@Html.Partial("MonthlyResultPartial", Model.MonthlyResults)
方法2:使用Action独立返回局部视图(无需修改主模型)
如果不想改动主视图模型,可创建专门返回局部视图的Action:
public ActionResult MonthlyResultPartial() { IEnumerable<WorkCampaignResultClass> data = // 从数据源获取目标数据 return PartialView(data); }
在主视图中调用该Action:
@Html.Action("MonthlyResultPartial")
或直接输出:
@{ Html.RenderAction("MonthlyResultPartial"); }
方法3:处理空模型的边界情况
如果主视图模型中的对应属性可能为null,调用时传递空集合避免空引用异常:
@Html.Partial("MonthlyResultPartial", Model.MonthlyResults ?? Enumerable.Empty<WorkCampaignResultClass>())
内容的提问来源于stack exchange,提问作者Mert Çakar
相关产品推荐
相关产品推荐

