2017-04-10 66 views
1

我想诊断我们基于asp.net的网站上的一些行为。以下是该场景:ASP.Net Response.Redirect模拟后退按钮

用户在页面1上执行查询,该查询使用数据填充GridView并将其重定向到第2页的超链接。

用户单击超链接并被重定向到第2页,他们可以编辑数据。在页面2的底部是一个取消按钮,该按钮应该让用户回到page1。

我想取消按钮将用户返回到page1并填充其搜索结果。如果单击我的浏览器上的“后退”按钮,但是我无法用response.redirect模拟此行为,则此方法可行。

我已经尝试了数以下的组合:

reponse.redirect(request.url.tostring())

和每一个实例似乎是指第2页和第一页不

你有什么建议吗?

回答

1

这将取决于您使用的.net版本。在.net Core中,请求中的标题包含所需的信息。

Request.Headers["Referer"] 

这有完整的URL与查询字符串。你可以在控制器中捕获它,并将其设置为视图模型上的值(或将其填充到视图包中)。

if (Request.Headers.Keys.Contains("Referer")) 
    ViewBag.Referer = HttpContext.Request.Headers["Referer"]; 
else 
    ViewBag.Referer = ""; 

然后在视图中使用string.IsNullOrEmpty(ViewBag.Referer)。为了安全起见,我添加了检查,为什么如果他们直接进入页面而没有链接?您可以使用Request.Headers.TryGetValue。这样会更安全一些,因为可能会有重复的标题,但实际上不应该,特别是在这里。

+0

嗨,感谢您的回应,它仍然没有工作,让我澄清发生了什么。我添加了一些断点并可以扩展一点。在第2页中,我在Page_Load事件中放置了一个断点,如果我打印出request.headers(“Referer”),它就正确地引用了page1。 在页面2我有一个“返回”按钮,应该把用户带回到页面1,但是如果我点击“后退”按钮,它会触发一个page_load事件,现在request.headers(“referer”)指向page2,因此我无法将用户返回到第1页上的原始查询。 – kevin

+0

发布“返回”按钮的代码。你应该做的是将你保存在ViewBag中的值(如上所示)发送到你的按钮的锚标签的href中。我的猜测是你的按钮是一个“提交”,并试图提交一个表单。 – nurdyguy

+0

我在“返回”按钮事件中所做的就是调用response.redirect,并按照您的建议将其存储的值传递给它。经过一些进一步的调查,我想我需要确定按钮是否导致回发,如果是,请不要分配引用者 – kevin