2008-08-31 9 views
7

मैं एक परियोजना प्रबंधन वेब एप्लिकेशन पर काम कर रहा हूं। उपयोगकर्ता की कार्यों की सूची प्रदर्शित करने के कई तरीके हैं। एक सूची पृष्ठ देखते समय, वे कार्य पर क्लिक करते हैं और कार्य संपादन पृष्ठ पर रीडायरेक्ट किए जाते हैं।संपादन पृष्ठ से उपयोगकर्ताओं को पुनर्निर्देशित करने के लिए पृष्ठ पर वापस

क्योंकि वे विभिन्न तरीकों से से आ रहे हैं, मैं को सबसे अच्छा तरह से करने के लिए के रूप में बस उत्सुक हूँ उपयोगकर्ता वापस बुला पृष्ठ पर रीडायरेक्ट। मेरे पास कुछ विचार हैं, लेकिन अन्य डेवलपर्स इनपुट प्राप्त करना चाहते हैं।

क्या आप पर कॉलिंग सत्र में यूआरएल स्टोर करेंगे? एक कुकी के रूप में? मुझे ऑब्जेक्ट का उपयोग करने की अवधारणा पसंद है पुनर्निर्देशन को संभाल लें।

उत्तर

5

मैं ViewState का उपयोग कर संदर्भ देने वाला URL संग्रहीत करेंगे। पृष्ठ के दायरे के बाहर इसे संग्रहीत करना (यानी सत्र स्थिति या कुकी में) समस्याएं हो सकती हैं यदि एक से अधिक ब्राउज़र विंडो खुली हैं।

नीचे दिया गया उदाहरण मान्य करता है कि पृष्ठ को आंतरिक रूप से कहा जाता है (यानी सीधे अनुरोध नहीं किया गया है) और उपयोगकर्ता प्रतिक्रिया के बाद संदर्भ पृष्ठ पर वापस आ जाता है।

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Request.UrlReferrer == null) 
     { 
      //Handle the case where the page is requested directly 
      throw new Exception("This page has been called without a referring page"); 
     } 

     if (!IsPostBack) 
     { 
      ReturnUrl = Request.UrlReferrer.PathAndQuery; 
     } 
    } 

    public string ReturnUrl 
    { 
     get { return ViewState["returnUrl"].ToString(); } 
     set { ViewState["returnUrl"] = value; } 
    } 

    protected void btn_Click(object sender, EventArgs e) 
    { 
     //Do what you need to do to save the page 
     //... 

     //Go back to calling page 
     Response.Redirect(ReturnUrl, true); 
    } 
} 
1

मैं व्यक्तिगत रूप से किसी ऑब्जेक्ट में आवश्यक पुनर्निर्देशन जानकारी संग्रहीत करता हूं और वैश्विक रूप से संभालता हूं। मैं एक क्वेरीरीस्ट्रिंग पैराम का उपयोग करने से बचूंगा या ऐसा इसलिए होगा क्योंकि वे खुद को उस पृष्ठ पर वापस उछालने का प्रयास कर सकते हैं, जिसे वे (संभव सुरक्षा समस्या?) नहीं मानते हैं। फिर आप पुनर्निर्देशन ऑब्जेक्ट को संभालने के लिए एक स्थिर विधि बना सकते हैं, जो जानकारी को पढ़ सकता है और तदनुसार कार्य कर सकता है। यह एक पृष्ठ के भीतर आपकी पुनर्निर्देशन प्रक्रिया को encapsulates।

किसी ऑब्जेक्ट का उपयोग करने का अर्थ यह भी है कि यदि आवश्यक हो तो आप इसे बाद में बढ़ा सकते हैं (जैसे रिटर्न संदेश और अन्य जानकारी जोड़ना)।

उदाहरण के लिए (यह एक 2 मिनट किसी न किसी दिशानिर्देश BTW है!):

public partial class _Default : System.Web.UI.Page 
{ 

    void Redirect(string url, string messsage) 
    { 
     RedirectionParams paras = new RedirectionParams(url, messsage); 
     RedirectionHandler(paras); // pass to some global method (or this could BE the global method) 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Redirect("mypage.aspx", "you have been redirected"); 
    } 
} 

public class RedirectionParams 
{ 
    private string _url; 

    public string URL 
    { 
     get { return _url; } 
     set { _url = value; } 
    } 

    private string _message; 

    public string Message 
    { 
     get { return _message; } 
     set { _message = value; } 
    } 

    public RedirectionParams(string url, string message) 
    { 
     this.URL = url; 
     this.Message = message; 
    } 
} 
1

यह संदेश चिह्नित किया जाना मेरे asp.net लेकिन मुझे लगता है यह एक मंच स्वतंत्र मुद्दा यह है कि सभी नए वेब डेवलपर्स दर्द के रूप में वे एक 'साफ़' तरीका यह है की तलाश है।

मुझे लगता है कि इस को प्राप्त करने में दो विकल्प हैं:

  1. यूआरएल में एक परम
  2. एक url सत्र में संग्रहीत

मैं यूआरएल विधि पसंद नहीं है, यह थोड़ा गन्दा है, और आपको प्रत्येक रिलीज यूआरएल में परम शामिल करना याद रखना होगा।

मैं इसके लिए स्थिर तरीकों के साथ एक वस्तु का उपयोग करूंगा। ऑब्जेक्ट उस सत्र आइटम के चारों ओर लपेटेगा जिसका उपयोग आप रीडायरेक्ट यूआरएल स्टोर करने के लिए करते हैं।

तरीकों शायद के रूप में (सभी सार्वजनिक स्थिर) इस प्रकार होगा:

  • setRedirectUrl (स्ट्रिंग यूआरएल)
  • doRedirect (स्ट्रिंग defaultURL)

setRedirectUrl किसी भी कार्रवाई में कहा जा सकता है कि लिंक/फॉर्म उत्पन्न करता है जिन्हें किसी दिए गए यूआरएल पर रीडायरेक्ट करने की आवश्यकता होती है। तो कहें कि आपके पास एक प्रोजेक्ट देखने की क्रिया है जो परियोजनाओं की एक सूची उत्पन्न करती है, प्रत्येक पर उन कार्यों के साथ जो उन्हें निष्पादित किया जा सकता है (जैसे हटाएं, संपादित करें) आप कोड में RedirectClass.setRedirectUrl ("/ project/view-all") को कॉल करेंगे यह क्रिया।

फिर मान लें कि उपयोगकर्ता हटाएं क्लिक करता है, उन्हें हटाने की कार्रवाई के बाद दृश्य पृष्ठ पर रीडायरेक्ट करने की आवश्यकता होती है, इसलिए हटाए गए क्रिया में आप RedirectClass.setRedirectUrl ("/ project/view-all") को कॉल करेंगे। यह विधि देखने के लिए देखेगी कि रीडायरेक्ट चर सत्र में सेट किया गया था या नहीं। यदि ऐसा है तो उस यूआरएल पर रीडायरेक्ट करें। यदि नहीं, तो डिफ़ॉल्ट यूआरएल पर रीडायरेक्ट करें (स्ट्रिंग को setRedirectUrl विधि में पास किया गया है)।

1

मैं मंच के स्वतंत्र होने के नाते इस मुद्दे के बारे में "rmbarnes.myopenid.com" से सहमत हूं।

मैं क्वेरी पेजिंग यूआरएल को क्वेरीरींग में या एक छिपे हुए क्षेत्र में संग्रहीत करूंगा (उदाहरण के लिए एएसपी.नेट के लिए व्यूस्टेट में)। यदि आप पेज स्कोप (जैसे सत्र, ग्लोबल वैरिएबल - एप्लिकेशन स्टेट और अन्य) के बाहर इसे स्टोर करेंगे तो टॉम ने कहा था, लेकिन यह आपको परेशान करेगा क्योंकि यह आपको अधिक परेशान नहीं करेगा।

किस तरह की परेशानी है? समस्या है कि उपयोगकर्ता के उस ब्राउज़र के एक से अधिक टैब (विंडो) खुले हैं। एक ही ब्राउज़र के टैब (या विंडोज़) शायद एक ही सत्र साझा करेंगे और पुनर्निर्देशन एक अपेक्षित नहीं होगा और सभी उपयोगकर्ता महसूस करेंगे कि यह एक बग है।

मेरे 2 यूरोकेंट्स ..

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