【问题标题】:get request url after AJAX requestAJAX请求后获取请求url
【发布时间】:2014-11-24 13:54:43
【问题描述】:

我有一个带有链接Search?params 的搜索页面,但任何后续搜索请求都是使用Asp.Net 通过Ajax 表单发出的。它向具有不同名称的操作发出请求,例如InstantSearch?params,但在浏览器中我看到Search?params

从这个页面我有一个到另一个页面的链接,我需要保存 URL 才能返回到这个页面。

但如果我有一个 AJAX 请求,Request.Url 返回InstantSearch?params,而不是浏览器地址栏中的链接。而且这个链接的动作只返回一个部分视图,所以当它返回到上一个 URL 时,页面就乱了。

如何从 Asp.Net 的浏览器地址栏中获取上一页的链接,而不是实际最后请求的 URL?

在搜索时,我们正在加载这样的砌体容器:

$("#main-content-container").load("/Kit/InstantSearch?" + parameters, function() {
        $('#mason-container').imagesLoaded(function() {
            $('#mason-container').masonry({
                itemSelector: '.kit-thumb-container',
                columnWidth: 210,
                isFitWidth: true,
                gutter: 10
            });


        });
    });

然后我在同一页面上调用基础 Joyride 并且需要传递当前页面 URL 以返回。 Joyride在这个链接下调用页面的onload:

@Html.ActionLink("Go to kit details help", "OrderPageHelp", "Kit", new { returnUrl = Request.Url }, new { @style = "font-size:16px;" })

所需的页面返回 URL 是 Kit/Search?params,但 Request.Url 在使用 Kit/InstantSearch?params 加载砌体时返回最后一个请求。

如何在不进行硬编码的情况下传递所需的 Url?

【问题讨论】:

  • 您需要展示您尝试过的代码/HTML 等。你想要什么的描述不清楚。
  • 其实我差不多找到了解决办法。我有这样的动作: Html.ActionLink("Go to help", "PageHelpAction", "HelpController", new { returnUrl = Request.Url }, new { @style = "font-size:16px;" }) Request.Url返回错误的 url(来自上次 AJAX 请求),但 JavaScript 的 location.pathname 返回所需的结果。我可以将该 JS 变量作为参数传递给 Html.ActionLink 吗?
  • 不。您不能像这样将客户端值传递到页面中。同样,您需要澄清您的问题并显示代码,以避免进一步的反对票。
  • 我用一些代码编辑了顶帖。

标签: asp.net-mvc-4 razor views


【解决方案1】:

所以这个有点旧,但我最近发现自己处于类似的情况并找到了一个快速的解决方法。贴出来以防有人感兴趣。

您可以利用 TempData 类来解决这个问题。 临时数据可用于在请求之间存储数据。只要会话处于活动状态,信息就会一直存在,直到您再次检索数据。

因此,当用户第一次加载页面时,在触发 ajax 方法之前,将数据存储在页面上的变量和 TempData("YourVariableName") 对象中。使用保存的 URL 创建操作链接。当 ajax 请求被触发时,它将覆盖 Request.URL 中的值。因此,检查 TempData("YourVariableName") 中的值,如果存在,请使用该值并重置 TempData("YourVariableName") 值。即使触发了许多 ajax 请求,这也会保留页面 URL 的原始值。 Visual Basic 中的代码:

@Code
    Dim LastURL As String = ""
    If Not TempData("LastURL") Is Nothing Then
        LastURL = TempData("LastURL")
        TempData("LastURL") = LastURL
    Else
        LastURL = Request.Url.AbsoluteUri
        TempData("LastURL") = LastURL
    End If
End Code

并将 LastURL 变量中存储的值作为参数传递给您的操作链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-02
    • 2012-09-26
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2018-06-04
    相关资源
    最近更新 更多