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

Posted

技术标签:

【中文标题】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.net response.redirect 命中 url,但不改变浏览器页面的主要内容,如果未能解决你的问题,请参考以下文章

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

VB。NET里Response.Redirect传递参数怎么传啊????

Response.Redirect HTTP 状态码

“EndResponse”可以提高 ASP.Net 页面的性能吗

ASP.NET - 停止/解决方法 Response.Write() 的异步行为

Response.Redirect 使用查询字符串