ASP.Net MVC एक अलग दृश्य के लिए पुनर्निर्देशित करता है


89

क्या किसी नियंत्रक से अलग दृश्य पर पुनर्निर्देशित करना संभव है?

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

जवाबों:


147

आप RedirectToAction()विधि का उपयोग कर सकते हैं , फिर आप जिस कार्य को पुनर्निर्देशित कर सकते हैं वह एक दृश्य लौटा सकता है। ऐसा करने का सबसे आसान तरीका है:

return RedirectToAction("Index", model);

फिर अपनी अनुक्रमणिका विधि में, वह दृश्य लौटाएँ जो आप चाहते हैं।


1
अगर मैंने इसे इस तरह किया तो मैं नियंत्रक एक्शन से एक विशिष्ट दृश्य कैसे वापस कर सकता हूं।
गैविन

18
वापसी देखें ("ViewName");
क्रेग स्टंट्ज़

11
@ क्रैग - वापसी दृश्य पुनर्निर्देशित नहीं करता है और URL पहले की तरह समाप्त हो रहा है। तो, अगर आप "/ edit / MyItem" पर हैं तो रिटर्निंग व्यू ("showitem") आपको "showitem" दृश्य "/ edit /" url के साथ देगा। आपकी स्थिति के आधार पर यह काम कर सकता है, लेकिन हमेशा नहीं।
jeffreypriebe

5
@ जेफ्री, वह दो अलग-अलग चरण हैं: पहली कार्रवाई में पुनर्निर्देशित, जैसा कि जॉन ने कहा, फिर दूसरे में देखें वापस। पहली कार्रवाई (सीधे, वैसे भी) दूसरे को नहीं बता सकती कि कौन सा उपयोग करना है।
क्रेग स्टंटज़

@ क्रेग जो थोड़ी मदद करता है। एक "कार्रवाई" और एक "दृश्य" है - दो अलग-अलग चीजें। फिर मेरा जवाब काम से नीचे क्यों है: पुनर्निर्देशन - दृश्य का कोई परिवर्तन नहीं। मुझे यकीन है कि यह .net MVC 101 है, लेकिन मुझे समझ में नहीं आता है। धन्यवाद।
jeffreypriebe

20
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }

2
यह एक ही नियंत्रक क्रिया का उपयोग करता है। पुनर्निर्देशन एक अलग कार्रवाई कहता है। यह मेरे लिए सबसे आसान उपाय था।
RaoulRubin

6

सबसे आसान तरीका है रिटर्न रिटर्न देखें।

return View("ViewName");

याद रखें, "ViewName" का भौतिक नाम आपके प्रोजेक्ट में ViewName.cshtml जैसा कुछ होना चाहिए, यदि आप MVC C # / .NET का उपयोग कर रहे हैं।


4

मैं 100% निश्चित नहीं हूं कि इसके लिए क्या स्थितियां हैं, लेकिन मेरे लिए ऊपर वाले ने सीधे काम नहीं किया, सोचा कि यह करीब हो गया है। मुझे लगता है कि ऐसा इसलिए था क्योंकि जिस मॉडल को मैंने "ऑब्जेक्ट" कहा था, उसमें मेरे विचार के लिए मुझे "आईडी" की आवश्यकता थी।

मेरे पास कई प्रकार की जानकारी वाला एक मॉडल था। मुझे बस आईडी की जरूरत थी।

उपरोक्त से पहले मैंने एक नया System.Web.Rout.RouteValueprise ऑब्जेक्ट बनाया और आवश्यक आईडी जोड़ी।

(System.Web.Routing.)RouteValueDictionary RouteInfo = new RouteValueDictionary();
RouteInfo.Add("id", ObjectID);
return RedirectToAction("details", RouteInfo);

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


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.