Asp.Net MVC 3 - @ Html.Action不会呈现/返回任何HTML

Ste*_*wen 7 partials renderaction razor asp.net-mvc-3

我今天一直在将一个相当新的项目从ViewPages搬到Razor,一切似乎都很顺利.除了我试图使用Html.Action呈现用户控件,它不会呈现任何东西.

所以我有一个在Home/Index.cshtml中引用的Shared/_Layout.cshtml文件

Index.cshtml具有以下内容:

<article>

@Html.Action("LatestBlogsMainPanelWidget", "Blogs")

...

</article>
Run Code Online (Sandbox Code Playgroud)

我把陷阱放在BlogsController中,所以我知道这是被请求的.我也知道正在返回一个模型,视图引擎正在找到LatestBlogsMainPanelWidget,甚至正在运行一些伪Razor语法代码:@ {var s ="hello"; }

但是这个文件中的普通html没有进入浏览器.我也尝试了其他(以前工作)的部分,它们也不会出现(页面上的查看源确认它不存在).

我也试过替换@ {Html.RenderAction(...); } 没有成功.@ Html.Action的任何一侧都出现HTML,所以我知道Index.cshtml正在显示.

更诡异的_layout文件也有Html.Action命令和他们似乎罚款.

我真的不确定还有什么要检查,或者如何确认管道正在获取HTML.任何人都可以帮忙吗?

谢谢!

小智 8

在局部视图上放置一个Layout = null,它将正常工作.

  • 实际上,我刚学会了,而不是添加它,(在我的情况下)我只需要切换返回视图以返回PartialView. (8认同)

use*_*030 6

试试这个:

@ {Html.RenderAction("LatestBlogsMainPanelWidget","Blogs");}


Ste*_*wen 1

大脑是个有趣的东西,尽管昨天花了几个小时研究这个问题,但我的狗半夜把我叫醒,我的潜意识才偶然发现了答案。

如果这让其他人感到困惑,我并不感到惊讶。我没有提及,因为我没有意识到我正在使用类似于 Steve Sanderson 设计的部分级缓存系统。我突然意识到这可能就是原因,因为据我所知,Razor 页面所经历的管道处理比 WebForm 页面少得多。缓存过滤器可能没有做它需要做的事情,或者没有在正确的时间做。

我已经确认注释掉相关操作上的 OutputCache 过滤器已经解决了问题。

我不知道这个问题是否适用于页面级缓存,因为我觉得它没有用。