加载另一个页面后重定向到一个页面后

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) 时,您是在告诉正在执行您的页面的服务器应该向浏览器发送响应,告诉浏览器执行提供的urlGET 请求。然后浏览器会这样做,此时那个页面需要包含一个单独的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处理异常

【讨论】:

谢谢,我明天试试,我真的完成了工作,所以如果它确实成功了,我会把它标记为答案 感谢您的回答,这绝对是我完成工作的方式,我希望我可以将其标记为答案的一部分,

以上是关于加载另一个页面后重定向到一个页面后的主要内容,如果未能解决你的问题,请参考以下文章

以 HTML 格式提交表单后重定向到页面

Laravel 5.5登录后重定向到特定路由

登录后重定向到登录页面

身份验证后重定向到所需页面[重复]

用户登录后重定向到要访问页面

登录成功后重定向到新页面