2009-01-30 13 views
9

मान लें कि मेरे पास एक नियंत्रक कार्रवाई है जो उपयोगकर्ता की खरीदारी टोकरी से किसी आइटम को हटा देती है। यह नियंत्रक कार्रवाई url ~/delete/{id} पर एक पोस्ट करके ट्रिगर की जाती है। अगर मेरे पास मेरे एप्लिकेशन पर कई पेज हैं जो इस यूआरएल पर पोस्ट करेंगे, तो मैं उस पेज पर वापस रीडायरेक्ट करने के लिए कंट्रोलर एक्शन कैसे बना सकता हूं?आप एएसपी.नेट एमवीसी में कॉलिंग पेज पर रीडायरेक्ट कैसे करते हैं?

उत्तर

0

मैंने कभी कोशिश नहीं की है लेकिन आप यह जानने के लिए रेफरर हेडर का उपयोग कर सकते हैं कि पोस्ट कहां से मिलता है या मार्ग से मेल खाता है।

11

आपको पोस्टिंग पेज से एक RedirectToUrl पैरामीटर प्रदान करना चाहिए।

रेफरर हेडर पर निर्भर करना एक अच्छा अभ्यास नहीं है। पोस्टिंग दृश्य या आंशिक दृश्य पर

public ActionResult Delete(int id, string RedirectToUrl) 
{ 
    // check if RedirectToUrl is null or empty and redirect accordingly 
} 

आप कई मायनों में पैरामीटर प्रदान कर सकते हैं:

<%= Html.Hidden("RedirecToUrl","/my/lovely/url") %> 

या

<form action="/item/delete/22?RedirectToUrl=/my/lovely/url"> 

मैं

इसके बजाय, कुछ इस तरह करते हैं पहला विकल्प पसंद करेंगे।

+0

अधिकांश आँकड़े सिस्टम संदर्भित हेडर पर भरोसा करते हैं पता करने के लिए जहां अनुरोध से आता है। यह भरोसेमंद नहीं है, लेकिन अगर मुझे किसी वेबसाइट में प्रत्येक लिंक को बदलने और रीफर करने के लिए रेफरर हेडर में निर्भर करने के बीच चयन करना है, तो मैं आखिरी के लिए जाउंगा, या कुछ AJAX एक्शनलिंक करूँगा क्योंकि tvanfosson सुझाव देता है। –

+0

हाँ यह हमेशा एक व्यापार है। किसी वेबसाइट में प्रत्येक लिंक को बदलना मेरे लिए खराब डिजाइन की तरह लगता है। यदि आप अपने नियंत्रकों का परीक्षण कर रहे हैं तो रीडायरेक्ट पैरामीटर परीक्षण करना भी आसान होगा। –

+2

हम यही करते हैं, लेकिन मैं दृढ़ता से अनुशंसित यूआरएल को "sanitizing" सलाह देता हूं, और अगर यह आपकी साइट का हिस्सा नहीं है तो इसे अनदेखा कर रहा है। यह रेफरर हेडर पर भी लागू होता है। –

2

पहली चीज जो मैं करता हूं वह Ajax.ActionLink का उपयोग करती है, फिर यदि उपयोगकर्ता के पास जावास्क्रिप्ट चालू है, तो आप वास्तव में पृष्ठ को कभी नहीं छोड़ेंगे। यह सबसे अच्छा समाधान है। यदि आप एक लिंक नहीं चाहते हैं, तो आप एक अजाक्स फॉर्म भी प्राप्त कर सकते हैं। इनमें से कोई भी DELETE या POST विधि का उपयोग कर सकता है।

जहां जावास्क्रिप्ट बंद है, को संभालने के लिए, जब आप नियंत्रक में पता लगाते हैं कि पोस्ट अजाक्स (Request.IsAjaxRequest गलत है) के साथ नहीं किया गया था, तो आप Request.UrlReferer प्रॉपर्टी को प्राप्त करने के लिए देख सकते हैं रेफरिंग पेज का यूआरएल। यदि यह शून्य नहीं है, तो आप इस पृष्ठ पर वापस जाने के लिए एक RedirectResult का उपयोग कर सकते हैं। यदि यह शून्य है, तो डिफ़ॉल्ट लैंडिंग पृष्ठ चुनें - शायद "आपका आइटम हटा दिया गया है, खरीदारी जारी रखने के लिए यहां क्लिक करें।" यह बाद में शायद ही कभी शायद ही कभी हिट हो जाएगा।

0

बस यूआरएल रेफरर [एसआईसी] हेडर का उपयोग करें।

var requestFrom = Request.UrlReferrer 

आपको कम से प्रलेखन पा सकते हैं: http://msdn.microsoft.com/en-us/library/system.web.httprequest.urlreferrer.aspx

केवल समय यह काम नहीं होगा जब पेज सीधे अनुरोध किया जाता है, लेकिन इस मामले में आप वैसे भी पर रीडायरेक्ट करने के लिए किसी भी जगह नहीं होती है ।

AJAX का उपयोग करके एकमात्र चीज एसिंक करने का विकल्प भी है, ताकि आपकी हटाई गई क्रिया केवल वही करे जो इसका वर्णन करती है और हटाने के अपने उद्देश्य के बाहर कुछ करने के लिए ज़िम्मेदार नहीं है।

0

यदि आप एमवीसी पैटर्न को लागू करने के लिए डब्ल्यूसीएसएफ (वेब ​​क्लाइंट सॉफ्टवेयर फैक्टरी) का उपयोग कर रहे हैं, तो आप सभी नेविगेशन करने के लिए पेजफ्लो का उपयोग कर सकते हैं।

उदाहरण के लिए: -

PageFlow.Next(); या पेजफ्लो।पिछला();

10

है यही कारण है कि मैं क्या कर:

public ActionResult ResendActivationEmail() 
    { 
     // Do other things here 
     return new RedirectResult(Request.UrlReferrer.AbsoluteUri); 
    } 
संबंधित मुद्दे