【问题标题】:Getting Ajax return to replace whole page让 Ajax 返回替换整个页面
【发布时间】:2011-03-06 21:00:15
【问题描述】:

这是我上周发布的问题"Ajax.ActionLink not Posting" 的后续问题。我终于把它发到了 Post,它正确地调用了我的 Delete 操作并删除了记录。 Delete 方法返回一个 RedirectToAction("List") 以便重新列出减去已删除记录的新数据集。除了实际发生的是 - 什么都没有。列表没有变化。而且我很确定我知道为什么:调用 Ajax.ActionLink 会返回一个 Ajax 结果,该结果应该只替换文档中的指定元素(UpdateTargetId 选项参数)。由于我没有指定任何内容,因此它不会替换任何内容,即使它是一个全新的页面。

我的问题是,我应该将什么传递给 AjaxOption.UpdateTargetId 以使其擦除整个页面并重新加载新结果,就像 Html.ActionLink 已被调用一样(回想一下使用 Ajax.UpdateTargetId 的唯一原因。 ActionLink 是我想要使用 POST 而不是 GET 调用的方法)? (而且由于此页面使用母版页,因此我无法选择仅在 body 元素上放置一个 ID。)

【问题讨论】:

  • 我不明白如果您要有效地重新加载整个页面,为什么还要使用 Ajax?你可以在没有 Ajax 的情况下进行 POST。
  • 你能给我一个链接吗?我花了大约一天的时间试图弄清楚我是如何到达那个 Ajax.ActionLink “解决方案”的。
  • 正如fearofawhackplanet 所说,Ajax 专门用于部分页面更新。如果您只想更新整个页面,则不需要/想要 ajax。

标签: ajax model-view-controller actionlink


【解决方案1】:

您可以在没有 Ajax 的情况下进行 POST。您需要使用表单并将 ActionLink 更改为提交按钮。这可能是最简单的方法。

否则,您需要更改 List 操作以返回 PartialView。这是呈现给您的 UpdateTargetId 的内容,您可以将其设置为页面上的外部 div。

您真的需要重新加载您的列表吗?您可以执行 Ajax POST 以删除数据库中的行,并使用 AjaxOptions 的 OnSuccess 属性调用 JavaScript 函数,然后从页面上的 html 中删除该行。

【讨论】:

  • 嗯,你可能说得很好。我确实知道如何使用
    进行 POST,但我不想使用它,因为表单提交操作正在执行其他功能。但也许我需要重新考虑一下。我真正想要的是像 Html.ActionLink 一样执行的东西,但执行的是 POST 而不是 GET。我尝试使用 onclick=javascript:$.post(/controller/action) 制作锚标记,但我无法让它工作,也无法弄清楚原因。
  • 为了结束循环,我听取了您的建议:我仅从列表视图的数据网格部分创建了一个 ListPartial 部分视图,并从列表视图本身调用它,将其包含在一个 div 中.然后我让 Delete 操作构造了 List 视图的所有数据,并使我的 Delete View 只包含 ListPartial 的 RenderPartial。现在在我的 Ajax.ActionLink 中,我可以使用包含部分的 div 的 ID 作为 UpdateTargetID,当删除完成时,它的输出(替换它)。感谢您的帮助。
猜你喜欢
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多