我在部分视图中放入了一个集合:
public ActionResult TopBanner() { var list = _ibi.Gets().ToList(); return PartialView(list); }
在页面这样使用就错误,但是单独访问TopBanner就可以,放入首页的Index中就不行。
@Html.Partial("TopBanner")
如果这样用,就都可以,在放入的页面也可以正常访问,请问这个是怎么回事啊!
@{Html.RenderAction("TopBanner", "Home");}
@{Html.RenderAction("TopBanner", "Home");}
1.单独访问TopBanner,是通过控制器转向的,model是传过来的。虽然你返回PartialView但是作用就是一个View
2.@Html.Partial("TopBanner"),是mvc的一个扩展方法,你看下源代码:
这里的意思就是根据你的@Html.Partial("TopBanner",model直接传入),根据视图页模板和model直接拼装成字符串返回(不经过控制器的)。所以你传入model就不会报错了
3.RenderAction与Html.Partial不同他会经过路由通过控制器转向。作用就跟单独访问是一样的。你看下RenderAction的源码就能理解了
@Html.Partial("TopBanner")这种方法应该用PartialViewResult而不是ActionResult吧
Partial方法必须要Model有嵌套关系,而RenderAction可以分开写自己页面的Model,这样比较方便。就是依赖关系而已。