2009-01-21 11 views
5

मुझे कोई समस्या है: जब मैं मास्टरपेज से Response.Redirect() को कॉल करता हूं तो यह काम नहीं करता है। खैर, डीबगिंग मैं देख सकता हूं कि जब तक प्री_रेंडर() विधि लक्ष्य पृष्ठ लोड नहीं हो जाता है, लेकिन फिर पिछले पृष्ठ को प्रस्तुत किया जाता है।मैं MasterPage से Response.Redirect() कैसे काम कर सकता हूं?

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

मैं एक जावास्क्रिप्ट कि जोड़ने क्वेरी स्ट्रिंग कहते है "कार्रवाई = भेजें" जब मैं संदेश पर क्लिक करें:

यहाँ बेहतर समझाने के लिए कुछ कोड है बटन।

यदि मैं पृष्ठ पर हूं "~/कुछ दिलचस्पी करने के लिए()" उदाहरण के लिए- मैं प्राप्तकर्ता चयन पृष्ठ पर जाना चाहता हूं, लेकिन जब मैं भेजें बटन पर क्लिक करता हूं तो मैं हमेशा एक ही पृष्ठ देखता हूं।

गलती क्या है?

+1

एक साइड नोट: चर स्टोर करने के लिए सत्र का उपयोग करने के बारे में सावधान रहें। ध्यान रखें कि उपयोगकर्ता के पास आपकी साइट के साथ दो टैब खुले हो सकते हैं और प्रत्येक पृष्ठ पिछले मान को ओवरराइट कर सकता है। क्वेरीस्ट्रिंग –

उत्तर

0

मुझे नहीं पता कि यह आपकी समस्या का मूल है लेकिन मैं 2 चीजें बदल दूंगा। मैं करने के लिए अपने कोड को बदल देंगे:

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

और तर्क के लिए कदम

1

Pageload लिए मुझे यकीन है कि मैं पूरी तरह से समस्या का आपका विवरण समझ में नहीं हूँ, लेकिन यहाँ कुछ बातों पर विचार करने के लिए कर रहे हैं:

आप एक भेजें बटन का जिक्र करते हैं। यदि यह एक है, तो इसे क्लिक करने से सर्वर पर जावास्क्रिप्ट पोस्टबैक सक्रिय हो जाता है। यह पोस्टबैक मूल यूआरएल के लिए है। मुझे यकीन नहीं है कि आप जावास्क्रिप्ट के साथ क्या संशोधित कर रहे हैं, लेकिन मुझे नहीं लगता कि यह पोस्टबैक यूआरएल (और क्वेरीस्ट्रिंग) को बदल देगा।

यदि आपको रीडायरेक्ट करने के लिए तर्क करने की आवश्यकता है तो आप सर्वर पर बटन क्लिक ईवेंट में निष्पादित करना चाहते हैं।

आप सर्वर पर किसी भी तर्क पर अमल करने की जरूरत नहीं है, तो आप जावास्क्रिप्ट के साथ रीडायरेक्ट के किए जा सकेंगे:

window.location = "chooseRecipients.aspx"; 
1

इस सिद्धांत (इस समय स्मृति से चल रहा है) का परीक्षण नहीं किया जा सकता है, लेकिन देना इस एक शॉट:

(क्षमा करें, ऊपर कोड साफ रूप में अच्छी तरह एक सा)

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

में वापसी यूआरएल भेजने के लिए बेहतर होगा, काम नहीं करता – p4bl0

1

आप एक लॉगिन-पृष्ठ पर उपयोगकर्ताओं में लॉग इन नहीं पुन: निर्देशित करना Request.RawUrl की जाँच करनी चाहिए (चाहते हैं) इस तरह:

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

अन्य सभी साइटें पुनर्निर्देशित की जाएंगी।

संबंधित मुद्दे