关于使用Html.RenderPartial和Html.Partial显示分部视图时提示参数错误的BUG
2012-06-13 10:33 Sam tsai 阅读(1248) 评论(0) 编辑 收藏 举报今天在使用使用Html.RenderPartial和Html.Partial显示分部视图时遇到了一个颇为奇怪的问题:
视图页面A:
@model DataResult
@Html.Partial("_B", Model.Data as System.Data.DataRow)
分部视图B:
@model System.Data.DataRow
视图A的Model我使用的是一个自定义的类型,其中包含一个Data属性类型为System.Data.DataRow
分部视图B的Model我使用的是System.Data.DataRow
按理说我这么调用分部视图B应该完全没问题啊
@Html.Partial("_B", Model.Data as System.Data.DataRow)
但实际情况却刚好相反,调用时一直提示:
传入字典的模型项的类型为“MvcWeb.Models.DataResult”,但此字典需要类型“System.Data.DataRow”的模型项。
谷歌了一下,终于找到问题的原因:
原来当我调用分部视图(B)传递的第二个参数Model为null时,系统默认会传递当前视图(A)的model,因为我使用的Model类型不一样,所以提示类型不匹配;网上有人说这应该是一个BUG,但我不明白的是,如果是Bug为什么迟迟没有修复呢?
这是网友提交的BUG:
http://aspnet.codeplex.com/workitem/8872
这是网上的一些相关讨论:
不管这到底是一个BUG还是微软mvc团队就是这么设计的,当前解决的办法是:
1.调用分部视图之前判断一下传递的参数是否为空(null),这应该不难,程序似乎本来也应该这么写。
2.传递三个参数,也就是使用三个参数的重载方法来调用。
我个人比较倾向于第一种,如果你有更好的方法,请不吝赐教。