2009-01-21 8 views
5

Mam problem: gdy wywołasz metodę Response.Redirect() z strony MasterPage, nie działa. Cóż, debugowanie widzę, że do metody Pre_Render() strona docelowa jest ładowana, ale następnie renderowana jest poprzednia strona.Jak mogę mieć pracę Response.Redirect() z MasterPage?

Oto niektóre kodu, aby lepiej wyjaśnić:

(od MasterPageMain.master.cs)

protected void Page_Init(object sender, EventArgs e) 
{ 
    string m_QueryStringValue = Request.QueryString.Get("action"); 
    if ((!string.IsNullOrEmpty(m_QueryStringValue)) && (m_QueryStringValue.ToLower() == "send")) 
    { 
     if (Session["to"] != null && Session["to"] is List<string>) this.SendPageByMail(); 
     else 
     { 
      Session.Add("AddressToSend", Request.RawUrl); 
      Response.Redirect("~/chooseRecipients.aspx"); 
     } 
    } 
} 

Mam skrypt, który dodaje ciągu kwerendy dodając „action = wyślij” po kliknięciu na Wyślij przycisk.

Jeśli jestem na stronie "~/somethingInterestingToSend()" - na przykład - chcę dostać się na stronę wyboru odbiorców, ale kiedy klikam przycisk Wyślij widzę zawsze tę samą stronę.

Co może być pomyłką?

+1

Uwaga dodatkowa: zachowaj ostrożność podczas używania zmiennych do przechowywania zmiennych. Należy pamiętać, że użytkownik może mieć otwarte dwie zakładki z witryną i każdą stroną zastępującą poprzednią wartość. Lepiej będzie wysłać adres URL powrotu w querystringu –

Odpowiedz

0

Nie wiem, czy to jest źródło problemu, ale zmieni 2 rzeczy. Chciałbym zmienić swój kod do:

Response.Redirect("~/chooseRecipients.aspx", false); 

i przenieść logiki pageload

1

Nie jestem pewien, czy w pełni zrozumieć swój opis problemu, ale tutaj jest kilka rzeczy do rozważenia:

Wspomniałeś przycisk wysyłania. Jeśli to jest, kliknięcie uruchamia skrypt zwrotny javascript na serwer. Odsyłacz ten dotyczy oryginalnego adresu URL. Nie jestem pewien, co modyfikujesz za pomocą JavaScript, ale nie sądzę, że zmieniłby on adres URL ogłaszania zwrotnego (i zapytania kwerendy).

Jeśli musisz wykonać logikę, aby przekierować, możesz chcieć wykonać w zdarzeniu kliknij przycisk na serwerze.

Jeśli nie trzeba wykonywać żadnej logiki na serwerze, można do przekierowania z javascript:

window.location = "chooseRecipients.aspx"; 
1

nie można przetestować tę teorię (działa z pamięci w tej chwili), ale dają ten strzał:

(przepraszam, oczyścić kod nieco również)

protected void Page_Init(object sender, EventArgs e) 
{ 
    string m_QueryStringValue = Request.QueryString.Get("action") ?? ""; 
    if (m_QueryStringValue.ToLower() == "send") 
    { 
     if ((Session["to"] as List<string>) != null) 
     { 
      this.SendPageByMail(); 
     } 
     else 
     { 
      Session.Add("AddressToSend", Request.RawUrl); 
      Response.Redirect("~/chooseRecipients.aspx", false); 
      HttpContext.Current.ApplicationInstance.CompleteRequest() 
     } 
    } 
} 
+0

Przepraszam, nie działa – p4bl0

1

Jeśli chcesz przekierować nie zalogowanych użytkowników do logowania-strony należy sprawdzić Request.RawUrl() w ten sposób:

string strURL=Request.RawUrl.ToUpper(); 

if (!strURL.Contains("LOGIN.ASPX") && !strURL.Contains("LOGOUT.ASPX") 
    && !strURL.Contains("ERROR.ASPX") && !strURL.Contains("UNDERCONSTRUCTION.ASPX")) 
{ 
    Response.Redirect("~/Login.aspx", false); 
} 

Wszystkie inne strony zostaną przekierowane.

Powiązane problemy