【问题标题】:Asp.Net MVC 3 - @Html.Action won't render/return any HTMLAsp.Net MVC 3 - @Html.Action 不会呈现/返回任何 HTML
【发布时间】:2011-05-23 16:03:33
【问题描述】:

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

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

Index.cshtml 有以下内容:

<article>

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

...

</article>

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

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

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

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

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

谢谢!

【问题讨论】:

  • 该操作的视图是否位于正确的位置?没关系,我只看到了我要找的一行。

标签: asp.net-mvc-3 razor partials renderaction


【解决方案1】:

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

【讨论】:

  • 正是我需要的。这对于我用 [ChildActionOnly] 属性装饰的操作很有用。
  • 实际上,我刚刚了解到,而不是添加它,(在我的情况下)我只需要切换返回视图以返回 PartialView。
【解决方案2】:

试试这个:

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

【讨论】:

  • 您可以在我尝试过的原始问题中看到。还是谢谢。
【解决方案3】:

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

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

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

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

【讨论】:

  • 好奇者和好奇者。我刚刚安装了 MVC 3 的 RC2,部分级别的缓存又开始工作了,所有的 html.actions 都再次出现了。好吧,抱歉打扰了!
【解决方案4】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多