2009-02-03 17 views
7

काफी सरल है, ऐसा प्रतीत होता है, लेकिन यह वास्तव में इस तथ्य के कारण नहीं है कि दृश्य संभवत: मॉडल और नियंत्रक के माध्यम से आपको पता नहीं चला सकता है। भले ही, यह एक समस्या है जिसके लिए समाधान की आवश्यकता है:लॉगिन फॉर्म के लिंक के लिए मैं एक वापसी यूआरएल कैसे निर्दिष्ट करूं?

मेरे पास एक लॉगिन लिंक है, जो उपयोगकर्ता को उपयोगकर्ता नाम और पासवर्ड दर्ज करने के लिए एक फॉर्म पर ले जाता है। जब उपयोगकर्ता "सबमिट" पर क्लिक करता है, तो मैं उस पृष्ठ पर रीडायरेक्ट करना चाहता हूं जिसे वह देख रहा था। ऐसा करने का सबसे आसान तरीका वर्तमान पृष्ठ पर यूआरएल को क्वेरीस्ट्रिंग (...?returnUrl=...) के रूप में निर्दिष्ट करना प्रतीत होता है और बाकी सब कुछ पहले से ही बनाया गया है।

लेकिन लिंक को प्रस्तुत करते समय मुझे अपने दृश्य से यह यूआरएल कहां मिल सकता है? मैं स्वाभाविक रूप से एक RedirectToActionResult का उपयोग नहीं कर सकता क्योंकि मैं वास्तव में उपयोगकर्ता को स्थानांतरित नहीं करना चाहता - केवल एक लिंक में यूआरएल प्रस्तुत करता हूं। कैसे?


संपादित करें:

मैं अब इस प्रश्न पर एक इनाम शुरू कर दिया है, और इसलिए मैं भी मेरी जरूरतों को स्पष्ट करने का उचित समझें।

मेरे पास मेरे साझा फ़ोल्डर में LoginCascrol नामक UserControl है। इसमें, मैं लॉगिन फॉर्म में एक एक्शनलिंक प्रस्तुत करता हूं, और इसे मेरे मास्टर पेज पर पाद लेख में शामिल किया गया है। क्या मैं करना चाहते है निम्नलिखित:

जब ActionLink प्रदान की गई है, क्वेरी स्ट्रिंग returnUrlदृश्य है कि वर्तमान में गाया जा रहा के लिए एक मार्ग के साथ जोड़ दिया जाता है। यदि यह पूरा हो जाता है, तो उपयोगकर्ता को उस पृष्ठ पर वापस ले जाया जाएगा जिसे वह कार्यक्षमता के साथ सफल लॉगिन के बाद देख रहा था जो पहले से ही एएसपी.नेट एमवीसी फ्रेमवर्क में बना है।

कारण पिछले उत्तरों पर्याप्त नहीं हैं कारण मुख्य रूप से उन्होंने को वर्तमान दृश्य पर रूट यूआरएल बनाने का तरीका प्रदान नहीं किया है। मुझे पता है कि क्वेरीस्ट्रिंग को कैसे जोड़ना है, लेकिन मुझे नहीं पता कि उस स्ट्रिंग में क्या रखा जाए।

उत्तर के रूप में उत्तर को चिह्नित करने के लिए, मैं मास्टरपेज में उपयोगकर्ता नियंत्रण से वर्तमान में दिखाए गए दृश्य के मार्ग को दोबारा बनाने का एक तरीका चाहता हूं।

उत्तर

20

समाधान इस तरह HttpContext.Current.Request.RawUrl उपयोग करने के लिए है:

<%= Html.ActionLink("log on", "LogIn", new { controller = "User", returnUrl = HttpContext.Current.Request.RawUrl }) %> 

या MVC futures (Microsoft.Web.Mvc.dll) से कोई एक्सटेंशन विधि के साथ:

<%= Html.ActionLink<AccountController>(c => c.LogOn("name", "password", false, HttpContext.Current.Request.RawUrl), "login here")%> 

एक्शनकंट्रोलर एमवीसी में डिफ़ॉल्ट है लेकिन केवल अपने आप को वापसी यूआरएल जोड़ें।

+0

मेरे पास एक्शनलिंक सहायक विधि का कोई सामान्य संस्करण नहीं था (क्या मुझे एक एमवीसी आरसी रीफ्रेश प्रोजेक्ट में होना चाहिए? क्या मुझे कुछ याद आ रहा है?) लेकिन यह काम करता है: <% = HTML.ActionLink ("लॉग ऑन", "लॉग इन", नया { नियंत्रक = "उपयोगकर्ता", returnUrl = HttpContext.Current.Request.RawUrl})%> –

+0

स्पष्टीकरण - यदि आप इस कोड में पोस्ट संपादित करते हैं, तो आपको उपहार मिलेंगे =) –

3

एक तरीका यह होगा कि उपयोगकर्ता को लॉगिन फॉर्म में भेजने के लिए लिंक होगा, उदाहरण के लिए returnUrl =/PageToReturnTo (<a href="/Account/Login/?returnUrl=/Product/10">Login</a>)। आप इसे लिखना चाहते हैं ताकि रिटर्न यूआरएल आपके मार्गों से बनाया गया हो, हालांकि, प्रत्येक पृष्ठ पर मैन्युअल रूप से उन लिंक को लिखना बोझिल हो सकता है।

एमवीसी में डिफ़ॉल्ट लॉगिन कार्रवाई में पहले से निर्मित returnUrl कार्यक्षमता है। बस इसे एक मूल्य पारित करने की आवश्यकता है और यह बाकी करेगा। यहां एक ताजा प्रोजेक्ट से विधि हस्ताक्षर की प्रतिलिपि बनाई गई है।

public ActionResult Login(string username, string password, bool rememberMe, string returnUrl) 

आशा है कि आपकी मदद करता है!

+0

आपके उत्तर के लिए धन्यवाद! मैं पहले से ही इसे प्राप्त कर चुका हूं - यह मेरे मार्गों से वापसी यूआरएल का निर्माण है जो मैं नहीं करता हूं। लिंक मेरे मास्टरपेज पर है, इसलिए प्रत्येक पृष्ठ पर लिंक को कड़ी-कोड करना एक विकल्प नहीं है। –

+0

इसके अलावा, एएसपी में मानक प्रमाणीकरण किसी संरक्षित क्षेत्र में मौजूद किसी भी अनुरोध पर? ReturnURL जोड़ देगा (यानी नियमों को अस्वीकार/अस्वीकार करने के साथ एक web.config फ़ाइल है)। –

0

मैं ASPX के बारे में पता नहीं है, लेकिन वहाँ समस्याओं हम इस निर्माण का सामना करना पड़ा के एक जोड़े हैं:

उपयोगकर्ता अपना पासवर्ड गलत हो जाता है, और लूप दौर लॉग इन पेज जब एक और जाना है, लक्ष्य अभी भी संरक्षित किया जाना चाहिए।

हम यह भी एक पृष्ठ है कि फिर बस-इन-टाइम लॉगिन आवश्यक

1

को पोस्ट चर संरक्षित करने के लिए आप Page.Request.Url उपयोग कर सकते हैं मार्ग है कि वर्तमान में गाया दृश्य के परिणामस्वरूप प्राप्त करने का निर्णय लिया।

हालांकि यह कॉस्मेटिक विस्तार से अधिक है, लेकिन आप '/' और '/default.aspx' मार्गों के माध्यम से आने वाले अनुरोधों को एकजुट करना चाहते हैं और हमेशा '/' मार्ग पर वापस आ सकते हैं। मेरे पास मेरे मास्टर पेज में एक सहायक संपत्ति है जो वास्तव में करता है।

protected Uri RouteUrl 
    { 
     get 
     { 
      if (Page.Request.Url.AbsolutePath.StartsWith("/default.aspx", StringComparison.OrdinalIgnoreCase)) 
      { 
       return new Uri(Request.Url, new Uri(Response.ApplyAppPathModifier("~/"))); 
      } 

      return Page.Request.Url; 
     } 
    } 
संबंधित मुद्दे

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