在AJAX请求之后获取请求URL

时间:2014-11-24 13:54:43

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

我有一个包含链接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在此链接下调用页面加载:

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

所需的网页返回网址为Kit/Search?params,但在使用Kit/InstantSearch?params加载砌体时,Request.Url会返回上一个请求。

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

1 个答案:

答案 0 :(得分:0)

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

您可以通过利用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变量中的值作为参数传递给您的操作链接。