【问题标题】:Html.ActionLink() gives me an empty link when I use it inside Html.RenderAction()当我在 Html.RenderAction() 中使用 Html.ActionLink() 时,它会给我一个空链接
【发布时间】:2010-02-18 19:47:14
【问题描述】:

我有一个带有动作“Foo”的 Microsoft MVC 项目,其视图(“Foo.aspx”)包含以下行:

<%= Html.ActionLink("mylinktext1", "bar") %>
<%= Html.ActionLink<MyController>(x => x.Bar(), "mylinktext2") %>

当我从网络浏览器点击它或从 AJAX 调用加载它时,它会正确返回:

<a href="/bar">mylinktext1</a>
<a href="/Bar">mylinktext2</a>

但是当我像这样从另一个视图调用操作时:

<% Html.RenderAction<MyController>(x => x.Foo()); %>

然后链接被渲染为没有目标。

<a href="">mylinktext1</a>
<a href="">mylinktext2</a>

为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: asp.net actionlink renderaction


    【解决方案1】:

    我不知道这是否是您做错了,但我从未将 Html.RenderAction 与返回 ASPX 视图的操作一起使用。当我调用 RenderAction 时,我确保我正在调用一个返回 ASCX 视图用户控件的控制器操作。

    通常 .ASPX 文件是一个完整的页面,您不能(不应该)在另一个页面中呈现它。 所以我认为你应该把它设为查看用户控制 (ASCX) 并将其放在共享或控制器的视图文件夹中。

    根据您的评论: 当然,这很好。您只需将数据作为模型返回到您的视图/视图用户控件。当您通过 AJAX 加载它们时,您应该考虑实现将视图渲染到字符串。搜索 Google 或 Stack 以获取更多信息。您还可以为您的操作方法搜索一个名为 JsonPox 属性的东西 - 也在互联网上的某个地方实现。它将启用装饰您的操作方法,以便它们能够返回 HTML 视图、XML 或 JSON,如果这也是您可能需要的。

    【讨论】:

    • 让 AJAX 操作返回用户控制视图是否有意义?我的项目具有应该可以通过 HTTP 直接访问的操作,但我也希望访问以从其他页面呈现他们的视图。例如,假设我有一个 AJAX 调用来动态更新页面的一部分,但是当该页面第一次呈现时,我想在不调用操作的情况下合并页面的该部分,因为页面操作已经计算了所有的值AJAX 动作必须计算。该页面可以将变量填充到部分中。这是明智的做法吗?
    • 我将 .aspx 文件切换为 .ascx,但同样的问题仍然存在。 显示带有 href="" 的链接。
    • 啊哈。使用 (x => x.Foo()); %> 导致问题。使用 工作正常。为什么键入的版本会失败,而魔法字符串的版本会起作用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2021-11-14
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2023-01-18
    相关资源
    最近更新 更多