2015-05-11 4 views
0

У меня есть страница aspx (webforms), которая вызывается из метода jQuery Post (который отлично работает), однако метод Response.Redirect из кода позади не перезагружать браузер с перенаправленным URL. Однако он действительно попадает в 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 Express (с Visual Studio 2012). Тупик!

+0

Почему вы сохранили 'true' для' Response.Redirect (o.product_link, 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 внутри веб-службы, которая берет крышку (идентификатор листинга) в качестве параметра (это очень легкий/малый латентный способ определения ссылки действителен без ее загрузки), возврат URL-адреса и перенаправление из jQuery , Вероятно, он будет работать быстрее - в этом случае полная загрузка не нужна. – MC9000

+0

Точно, теперь вы на правильном пути –

+0

Единственная проблема с отсутствием полной обратной передачи (публикация на страницу переадресации) заключается в том, что я сталкиваюсь с опасной проблемой блокировки всплывающих окон, что напугает людей (к сожалению, есть никоим образом не обойти window.open, вызывающие блокировку всплывающих окон). Я думаю, мне просто нужно использовать гиперссылку на мою redir-страницу с помощью querystring (например, http: //mysite/redir.aspx? Lid = xxxx) в href с целью как _blank, а затем использовать 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

Смежные вопросы