asp怎样用response.Redirect进行页面跳转。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp怎样用response.Redirect进行页面跳转。相关的知识,希望对你有一定的参考价值。

参考技术A

使用:Response.Redirect(url),可以在url中带参数返回到用户登录页面。

Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。 

这就是说,使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答,第二次是请求302应答中声明的新页面,得到重定向之后的页面。 

扩展资料:

其它方式:

1、Server.Transfer

Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。 

如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。 

默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。 

同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。

因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的EnableViewStateMac属性设置成False。 

2、Server.Execute 

Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。 

这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。 

默认情况下,被调用页面的输出追加到当前应答流。但是,Server.Execute方法有一个重载的方法,允许通过一个TextWriter对象(或者它的子对象,例如StringWriter对象)获取被调用页面的输出,而不是直接追加到输出流,这样,在原始页面中可以方便地调整被调用页面输出结果的位置。 

参考资料来源:百度百科-asp(动态服务器页面)

asp.net response.redirect 命中 url,但不改变浏览器页面

【中文标题】asp.net response.redirect 命中 url,但不改变浏览器页面【英文标题】:asp.net response.redirect hitting url, but not changing browser page 【发布时间】:2015-05-11 05:44:38 【问题描述】:

我有一个从 jQuery Post 方法(工作正常)调用的 aspx 页面(webforms),但是后面代码中的 Response.Redirect 方法不会使用重定向的 URL 重新加载浏览器。然而,它确实点击了 URL。 我很确定这与从 jQuery 调用的页面有关,但不确定为什么会发生这种行为。

protected void Page_Load(object sender, System.EventArgs e)

    if (!Page.IsPostBack)
    
        //lid = Validation.StripToGUID(ObjToGUID(Request.QueryString("lid")))
        lid = Validation.StripToGUID(ObjToGUID(Request.Form["lid"]));
        string sid = null;
        if (lid.Length == 36)
        
            //retrieve the link (and product data) from the database
            LiveItem_Data.DBConnStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
            LiveItem o = new LiveItem();
            o = LiveItem_Data.GetLive_ItemFromLID(lid);


            if (HTTPStuff.RemoteFileExists(o.product_link))
            
                Response.Redirect(o.product_link, true);
            
            else
            
                //generate an error                 
            


        

    

我单步执行了代码,product_link 正在工作(手动剪切并粘贴到浏览器中),并且正在调用远程页面(我正在测试与另一个具有日志记录的站点的链接)。 然而,浏览器并没有打开(试过 FF、IE、Opera、Chrome)新的 URL。

jQuery 帖子:

$('.popInfoHG').click(function () 
    var ListID = $(this).parent().find('[id*=hidlid]').val();
    $.post("redir.aspx",  lid: ListID );
);

我验证了 IIS Express 中的 HTTPredirect 功能已打开(来自 Visual Studio 2012)。难倒!

【问题讨论】:

你为什么要为Response.Redirect(o.product_link, true);保留true 结束响应,但是false也不行。 【参考方案1】:

我认为从 jquery 功能来看,它不会从服务器重定向页面,您必须在客户端本身执行此操作,即在单击功能的成功部分中

$('.popInfoHG').click(function () 
    var ListID = $(this).parent().find('[id*=hidlid]').val();
    $.post("redir.aspx",  lid: ListID ).success(function() 

//write the redirection code here

);
);

【讨论】:

好点。也许我应该把 RemoteFileExists 方法放在一个 web 服务中,它以一个盖子(列表 id)作为参数(这是一种非常轻量级/低延迟的方式来确定链接是否有效,无需加载它),返回 url 并从 jQuery 重定向.它可能会运行得更快——在这种情况下,完全回发并不是必需的。 没有完整回发(发布到重定向页面)的唯一问题是我遇到了可怕的弹出窗口阻止程序问题 - 这会吓跑人们(不幸的是,没有办法绕过 window.open 导致弹出窗口阻止程序参与)。我想我只需要在目标为_blank的href中使用带有查询字符串(如mysite/redir.aspx?lid=xxxx)的redir页面的超链接,然后使用response.redirect。【参考方案2】:

我认为您使用的帖子不正确。 Post 用于进行隐藏的服务调用,不影响浏览器窗口。

如果你只是想重定向浏览器窗口,而redir.aspx 将接受GET 或POST,你可以使用window.location.href:

$('.popInfoHG').click(function () 
    var ListID = $(this).parent().find('[id*=hidlid]').val();
    window.location.href = "redir.aspx?lid=" + ListID;
);

如果redir.aspx 不接受GET,我建议你在你的页面上创建一个隐藏的表单(带有一个盖子隐藏的输入元素)并以编程方式发布。

【讨论】:

同意。我实际上想打开一个新窗口,让旧窗口保持打开状态,而不仅仅是原始页面的重定向。我只是使用到 redir.aspx 页面的标准链接,然后,从服务器端,它对新的 url 执行 response.redirect(在服务器端记录点击和其他信息以跟踪人口统计数据之后)。这样,访问者的浏览器中不会显示一条消息,要求允许弹出窗口(这是所需的)。

以上是关于asp怎样用response.Redirect进行页面跳转。的主要内容,如果未能解决你的问题,请参考以下文章

asp怎样用response.Redirect进行页面跳转。

response.redirect 用法

Response.Redirect HTTP 状态码

asp.net response.redirect 命中 url,但不改变浏览器页面

HTTPServerUtility.Transfer 是不是比 Response.Redirect 在 asp.net 中的网站性能更有用?

请高手看看我这段ASP代码中response.redirect为啥不起作用?