7

我今天一直在将一个相当新的项目从 ViewPages 转移到 Razor,而且一切似乎进展顺利。除了我试图使用 Html.Action 来呈现用户控件并且它不会呈现任何东西。

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

Index.cshtml 有以下内容:

<article>

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

...

</article>

我已经在 BlogsController 中设置了陷阱,所以我知道这是被请求的。我还知道一个模型正在返回,LatestBlogsMainPanelWidget 正在被视图引擎找到,甚至正在运行一些虚拟的 Razor 语法代码:@{ var s = "hello"; }

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

我也尝试过替换 @{ Html.RenderAction(...); } 没有成功。@Html.Action 两边的 HTML 都出现了,所以我知道 Index.cshtml 显示正确。

更奇怪的是 _Layout 文件也有 Html.Action 命令,而且它们看起来确实不错。

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

谢谢!

4

4 回答 4

8

将 Layout = null 放在局部视图上,它会正常工作。

于 2011-01-21T19:50:22.970 回答
6

试试这个:

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

于 2010-12-16T02:23:18.630 回答
1

大脑是一个有趣的东西,尽管昨天花了几个小时,我的狗在半夜把我叫醒了一会儿,我的潜意识才偶然发现了答案。

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

我已经确认在有问题的操作上注释掉 OutputCache 过滤器已经解决了这个问题。

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

于 2010-12-11T06:38:03.793 回答
1

在搜索此问题的解决方案时,我发现了 Html.Action 和 Html.RenderAction 渲染不正确的三个度量问题。请验证您是否正确完成了以下操作。

  1. 在您的 PartialView 或 View 中,您已经定义了@{Layout = null;}
  2. 使用 return PartialView而不是View
  3. 使用[ChildActionOnly]属性装饰您的操作。

我希望通过应用上述所有步骤,您可以解决您的问题。

于 2015-09-18T06:56:48.867 回答