加载另一个页面后重定向到一个页面后
Posted
技术标签:
【中文标题】加载另一个页面后重定向到一个页面后【英文标题】:After Redirecting to a page after loading another page 【发布时间】:2017-06-08 17:33:40 【问题描述】:目前我有一个页面,当您填写文本框并单击按钮时,它会将您重定向到另一个页面。
需要加载页面,因为它会更新并显示 xml。 (我目前无法改变这种情况)
但是我要做的是在页面被重定向一次之后,再次重定向它或者只是加载另一个页面。
关于 xml 链接需要注意的是,它的一部分是用文本框创建的,所以它是动态的。
我目前有一些类似的东西
//please note that username is a textbox, I've just left it out
<script runat = "server">
void Button_Click(Object sender, EventArgs e)
var url = "http://website.com/scripts/" + username.text "/value/0"
try
Response.Redirect(url, true);
catch(Exception ex)
//From what I learnt, adding true to redirect throws an exception,
//which is how I tried executing another redirect, but it doesn't seem to
//to load the first direct, and skips straight to this, I also put this
//in finally, because it seemed more appropriate to no avail
Response.Redirect(someurl, true);
所以我想知道这是否真的可能,我也想知道我是否只是在查找错误的关键字以找到解决方案。
我在这方面花了一些时间,还没有找到某种解决方案,但我是 web 开发的新手,所以我可能只是错过了一些非常简单的东西。
另外我只是真正了解 C# 在 asp 中的工作原理,但如果需要,我愿意学习如何在 javascript 或 VB 中添加。
提前感谢您的帮助
编辑:解决方案!
所以我设法使用 javascript 将文本框值附加到 xml 链接,请求它并且不显示用户(在这种情况下不需要显示用户)。
然后弹出确认成功然后重新加载页面。
这是非常不言自明的,但我所做的是
url = "website";
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", url, true);
window.alert("success");
return true;//this reloads the page, that or just window.location.reload();
对于一个额外的检查,我将看看我是否可以验证用户名是一个有效的用户名,如果不是,则弹出失败文本。
【问题讨论】:
你的问题有点模糊。如果您问是否可以在重定向中进行重定向,那么可以。 抱歉,我该怎么做? 您这样做有什么问题?在您的第一个重定向页面上执行操作后,只需根据您的要求再次调用 Response.Redirect 或 Server.Transfer。 那么检查 xml 链接(我使用另一种外部检查方式)如果我执行以下操作,它不会正确更新 xml,所以看起来我必须加载第一个链接有点痛苦,但我无法真正改变 xml 的工作方式 【参考方案1】:您似乎对Response.Redirect(...)
的实际作用存在误解。在我看来,方法名称有点误导。它表明当前执行请求的Response
将以某种方式发送到请求浏览器之外的其他地方。这不是的情况。这个名字也可以是Response.SendRedirectResponseToBrowser
,因为Response.Redirect
就是这样做的。
因此,当您执行Response.Redirect(url)
时,您是在告诉正在执行您的页面的服务器应该向浏览器发送响应,告诉浏览器执行提供的url
的GET
请求。然后浏览器会这样做,此时那个页面需要包含一个单独的Redirect
,以便进一步告诉浏览器下一步要去哪里。
在这种情况下,"http://website.com/scripts/" + username.text "/value/0"
处的页面需要进行修补,以便在处理请求后,它还会发送一个重定向响应,其中包含您接下来要显示的 url。
如果您无法控制该页面,则必须通过其他方式解决此问题。一些选项:
使用ajax
请求"http://website.com/scripts/" + username.text "/value/0"
url。然后在完成后将页面位置设置为您接下来要显示的网址。
在_blank
目标中打开http://website.com/....
url,然后设置到下一页的位置。
在您的代码隐藏方法中使用System.Net.Http.HttpClient
来请求http://website.com/....
url,然后进行重定向。这意味着 服务器 请求 url 作为处理按钮点击的一部分。
注意事项:
如果http://website.com/....
url 更新了一些状态(比如在数据库中存储一些更改或类似的),那么您应该使用POST
请求而不是GET
请求它。 GET
请求可以获得缓存响应,这意味着服务器可能永远不会真正看到请求,因此不会进行任何处理。
像"http://website.com/scripts/" + username.text "/value/0"
这样拼凑 URL 看起来很冒险。您应该至少对 username.text
- HttpUtility.UrlEncode(username.text)
进行 url 编码。更好的是首先验证输入的用户名实际上是一个有效的用户名。
【讨论】:
感谢您消除误解,我在大学时从未真正了解过 Web 开发概念,目前也没有从更好的基础上正确学习 Web 开发的奢侈。老实说,我不喜欢这个服务器的创建方式,而且它是在我入职之前完成的。再加上我对 Web 开发和服务器开发的整体了解很少,我不想尝试重建它。 xml链接很随意,其实我是在服务器上搜索的,一个没用过的方法,真正用的只是一个真假值,仅此而已。 我会继续尝试一下,再次感谢您的解释。 非常感谢!,我设法使用javascript请求页面,发送null,然后在一个小弹出窗口后最终刷新页面。它按我需要的方式工作。【参考方案2】:您可以将Refresh header(不是元刷新元素)添加到包含 XML 的响应中。在标头中,您可以指定另一个 URL 以及重定向前等待的秒数。
【讨论】:
我试过做 Response.AddHeader("REFRESH", "2, URL="website"");最后但似乎没有用,我猜这不是正确的方法。【参考方案3】:我猜它应该使用 JavaScript(前端)而不是后端错误处理,因为它会转到另一个页面。使用promise处理异常
【讨论】:
谢谢,我明天试试,我真的完成了工作,所以如果它确实成功了,我会把它标记为答案 感谢您的回答,这绝对是我完成工作的方式,我希望我可以将其标记为答案的一部分,以上是关于加载另一个页面后重定向到一个页面后的主要内容,如果未能解决你的问题,请参考以下文章