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传递参数怎么传啊????
“EndResponse”可以提高 ASP.Net 页面的性能吗