我有一个包含链接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?
答案 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变量中的值作为参数传递给您的操作链接。