2015-05-11 54 views
0

我有一個從jQuery Post方法調用的aspx頁面(webforms)(它工作正常),但是來自後面的代碼的Response.Redirect方法確實不要使用重定向的URL重新加載瀏覽器。但是,它實際上確實會觸發該網址。 我很確定這與jQuery調用的頁面有關,但不知道爲什麼會發生這種行爲。asp.net response.redirect命中url,但沒有改變瀏覽器頁面

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 }); 
}); 

我覈實,HTTPredirect功能在IIS快速打開(從Visual Studio 2012)。難倒!

+0

爲什麼你爲'Response.Redirect(o.product_link,true)保留'true';' –

+0

要結束響應,但false也不起作用。 – MC9000

回答

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 

}); 
}); 
+0

好點。也許我應該把RemoteFileExists方法放在一個web服務中,這個web服務使用lid(listing id)作爲參數(它是非常輕量級的/低延遲的方式來確定鏈接是否有效,無需加載它),返回url和從jQuery重定向。它可能會運行得更快 - 在這種情況下,完全回發並不是真的需要。 – MC9000

+0

確切地說,現在你在正確的軌道 –

+0

沒有完整的回傳(張貼到重定向頁面)的唯一問題是我遇到了可怕的彈出窗口阻止程序問題 - 這會嚇跑人們(不幸的是,有沒有辦法繞過window.open導致彈出窗口攔截器參與)。 我想我只需要在目標爲_blank的情況下用href的查詢字符串(如http://mysite/redir.aspx?lid = xxxx)使用超鏈接,然後使用response.redirect。 – MC9000

0

我不認爲您正在使用帖子的權利。帖子用於進行隱藏的服務呼叫,不會影響瀏覽器窗口。

如果你只是想重定向瀏覽器窗口,並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,我建議你在你的頁面上創建一個隱藏的表單(帶有一個隱藏的輸入元素)並以編程方式發佈。

+0

同意。我實際上想打開一個新窗口,讓舊窗口打開,而不僅僅是原始頁面的重定向。我只是使用redir.aspx頁面的標準鏈接,然後,從服務器端,它執行一個response.redirect到新的url(在服務器端記錄點擊和其他信息以跟蹤人口統計數據)。這樣,訪問者的瀏覽器中就不會出現一條消息,要求允許彈出窗口(這是所需的)。 – MC9000

相關問題