2009-01-21 20 views
5

Tôi gặp vấn đề: khi tôi gọi Response.Redirect() từ MasterPage, nó không hoạt động. Vâng, gỡ lỗi tôi có thể thấy rằng cho đến khi phương thức Pre_Render() trang đích được tải, nhưng sau đó được hiển thị trang trước đó.Làm thế nào tôi có thể có Response.Redirect() làm việc từ MasterPage?

Dưới đây là một số mã để giải thích tốt hơn:

(từ 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"); 
     } 
    } 
} 

Tôi có một javascript có thêm các chuỗi truy vấn thêm "action = gửi" khi tôi bấm vào Gửi nút.

Nếu tôi đang ở trang "~/somethingInterestingToSend()" -cho ví dụ- tôi muốn vào trang chọn người nhận, nhưng khi tôi nhấp vào nút Gửi, tôi luôn thấy cùng một trang.

Lỗi lầm nào là sai lầm?

+1

Lưu ý phụ: hãy cẩn thận về việc sử dụng phiên để lưu trữ biến. Lưu ý rằng người dùng có thể có hai tab mở với trang web của bạn và mỗi trang ghi đè giá trị trước đó. Sẽ tốt hơn nếu gửi url trả về trong chuỗi truy vấn –

Trả lời

0

Tôi không biết liệu gốc của vấn đề của bạn nhưng tôi sẽ thay đổi 2 điều. Tôi muốn thay đổi mã của bạn để:

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

và di chuyển logic để PageLoad

1

Tôi không chắc chắn tôi hoàn toàn hiểu mô tả của bạn của vấn đề, nhưng đây là một vài điều cần xem xét:

Bạn đề cập đến nút gửi. Nếu đây là một, nhấp vào nó sẽ kích hoạt một postback javascript cho máy chủ. Đăng lại này là URL gốc. Tôi không chắc chắn những gì bạn đang sửa đổi với Javascript, nhưng tôi không nghĩ rằng nó sẽ thay đổi URL postback (và chuỗi truy vấn).

Nếu bạn cần thực hiện logic để chuyển hướng, bạn có thể muốn thực thi trong sự kiện nhấp nút trên máy chủ.

Nếu bạn không cần phải thực hiện bất kỳ logic trên máy chủ, bạn có thể để chuyển hướng với javascript:

window.location = "chooseRecipients.aspx"; 
1

Không thể kiểm tra lý thuyết này (chạy từ bộ nhớ vào lúc này), nhưng cung cấp này một shot:

(xin lỗi, dọn dẹp mã một chút cũng)

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

xin lỗi, không hoạt động – p4bl0

1

Nếu bạn muốn chuyển hướng chưa đăng nhập người dùng đăng nhập trang bạn nên kiểm tra Request.RawUrl() như thế này:

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

Tất cả các trang web khác sẽ được chuyển hướng.

Các vấn đề liên quan