我在Web应用程序中有多个表单,这些表单的按钮当前没有按照我希望的方式运行。
单击按钮时,它们将执行某些操作,然后执行Reponse.Redirect到某个计算位置。问题是现在计算的位置是错误的。
我正在考虑更换此重定向逻辑并尝试仅仅挂钩Web浏览器具有的后退/前进功能。问题是,我不知道如何发布
Response.PageBack() //back button equivalent on your standard browser
ASP.NET 2.0中是否存在类似这样的内容,或者我尝试执行不存在的操作?
答案 0 :(得分:2)
如何将onclick
客户端事件添加到按钮:
onclick="history.go(-1); return false;"
答案 1 :(得分:1)
另一个答案中提到的javascript版本可能更好,但是如果你想在后面的代码中执行它,你可以这样做:
Response.Redirect(Request.UrlReferrer.AbsoluteUri);
引用者可能会被剥离,这取决于某人是如何到达您的页面的,但在这种情况下,它将无法比浏览器的“后退”按钮更糟糕。
答案 2 :(得分:0)
它不是内置的。你可以按顺序构建用户访问过的页面列表 - 但是当你考虑多个标签/窗口时,它会变得非常毛茸茸。
我怀疑你会对你的选择感到满意。浏览器中的后退按钮是安全问题,因此您不能在javascript中读取位置 - 只能导航到历史记录中的某个点(goo back 1 page,3 pages,etc)。所以你可以使用javascript向用户发回一页,但如果这是一个购物车类型的应用程序,那可能不是你想要的。
答案 3 :(得分:0)
没有允许您执行此操作的功能。问题是历史存在于客户端,而不是服务器上。
如果您只关心返回一页,那么您可以做的是渲染页面时,获取正在渲染的页面的引用者,然后设置事件处理程序以单击该按钮(在javascript)导航到该页面。
您还可以将javascript中的history.previous调用的值传递回您的服务器,但问题是您有一个巨大的安全漏洞,任何人都可以传回任何网址。
答案 4 :(得分:0)
这样的事情应该合理地运作。在初始页面加载时捕获引用者。当你进行回发时,我相信引用者已经设置为自己,所以你不能在回发期间依赖Request.UrlReferrer。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["previousPage"] = Request.UrlReferrer;
// do other stuff as needed
}
}
protected void Button_Click(object sender, EventArgs e)
{
// do a bunch of stuff
Uri referrer = ViewState["previousPage"] as Uri;
if (referrer != null)
Response.Redirect(referrer.PathAndQuery);
}