पैरामीटर के साथ पुनर्निर्देशन


596

मेरे पास एक एंकर से कॉल करने की क्रिया है, Site/Controller/Action/IDजहां ए IDहै int

बाद में मुझे एक कंट्रोलर से इसी एक्शन को रीडायरेक्ट करना होगा।

क्या ऐसा करने का एक चतुर तरीका है? वर्तमान में मैं IDtempdata में टकरा रहा हूं , लेकिन जब आप पृष्ठ पर वापस जाने के लिए पृष्ठ को फिर से ताज़ा करने के लिए f5 हिट करते हैं, तो temddata चला जाता है और पृष्ठ क्रैश हो जाता है।

जवाबों:


946

आप id को RedirectToAction () विधि के मार्ग पैरामीटर पैरामीटर के भाग के रूप में पास कर सकते हैं।

return RedirectToAction("Action", new { id = 99 });

यह साइट / नियंत्रक / कार्रवाई / 99 पर पुनर्निर्देशित करेगा। अस्थायी या किसी भी प्रकार के डेटा की आवश्यकता नहीं है।


2
वहाँ वैसे भी है या ऐसा ही कुछ है, लेकिन यह भी नियंत्रक निर्दिष्ट? (मुझे एक नियंत्रक से दूसरे नियंत्रक की कार्रवाई करने की आवश्यकता है)।
डिएगो

18
@ डिगो: हाँ, उसके लिए कुछ ओवरलोड हैं। मेरे उदाहरण में यह RedirectToAction ("एक्शन", "कंट्रोलर", नया {id = 99}) msdn.microsoft.com/en-us/library/dd470154.aspx
कर्ट शिंडलर

10
VB -Return RedirectToAction("Action", "Controller", New With {.id = 99})
जेरेमी ए। वेस्ट

वहाँ एक ही काम करने का एक तरीका है, लेकिन url अद्यतन ऐसा नहीं है?
वर्थि 7

@KurtSchindler वैसे भी अपने जवाब को अपडेट करने के लिए अपने रीडायरेक्ट को अलग-अलग कंट्रोलर को रीडायरेक्ट में शामिल करने के लिए? उन लोगों की मदद करने के लिए जो टिप्पणी पढ़ना छोड़ सकते हैं।
एडवर्ड

194

कर्ट का जवाब सही होना चाहिए, मेरे शोध से, लेकिन जब मैंने कोशिश की तो मुझे वास्तव में मेरे लिए काम करने के लिए ऐसा करना पड़ा:

return RedirectToAction( "Main", new RouteValueDictionary( 
    new { controller = controllerName, action = "Main", Id = Id } ) );

यदि मैंने नियंत्रक को निर्दिष्ट नहीं किया और इसमें कार्रवाई RouteValueDictionaryनहीं हुई।

जब इस तरह कोडित किया जाता है, तो पहले पैरामीटर (एक्शन) को नजरअंदाज कर दिया जाता है। इसलिए यदि आप केवल डिक्ट में कंट्रोलर को निर्दिष्ट करते हैं, और एक्शन को निर्दिष्ट करने के लिए पहले पैरामीटर की अपेक्षा करते हैं, तो यह भी काम नहीं करता है।

यदि आप बाद में साथ आ रहे हैं, तो पहले कर्ट के उत्तर का प्रयास करें, और यदि आपके पास अभी भी समस्या है तो इसे आज़माएं।


6
बहुत बढ़िया जवाब। इसके अलावा, मुझे विश्वास है कि controllerपैरामीटर वैकल्पिक है यदि रीडायरेक्ट कार्रवाई उसी कंट्रोलर में है जिस एक्शन से आप रीडायरेक्ट कर रहे हैं।
im1dermike

1
यह माना जाता है, लेकिन जब मैंने इसे इस तरह से किया, तो यह काम नहीं कर रहा था, मुझे स्पष्ट रूप से नियंत्रक को जोड़ना था ... जो कि एमवीसी के मेरे पहले दिनों में था, अगर मुझे लगता था कि मुझे अब कहना होगा तो मैं कहूंगा देखने के लिए कुछ प्रकार के रूटिंग सेटअप समस्या थी।
एरिक ब्राउन -

अजीब। मेरे लिए MVC4 में काम करता है।
im1dermike 17

यह MVC1 दिनों में वापस हुआ, और इसने दूसरों के लिए ठीक काम किया, यही कारण है कि मुझे एक कॉन्फ़िगरेशन मुद्दे पर संदेह है, वापस देख रहा है।
एरिक ब्राउन -

@ EricBrown-Cal ने आपकी टिप्पणियों में आपकी खुद की सबमिशन को देखते हुए भी आपको नहीं लगता कि कर्ट का जवाब उन लोगों के लिए बेहतर है जो आपके शुरुआती दिनों में उसी मुद्दे पर जवाब मांग रहे थे?
एडवर्ड

62

RedirectToAction पैरामीटर के साथ:

return RedirectToAction("Action","controller", new {@id=id});

1
क्या यह काम करता है? मेरा मानना ​​है कि यह गलत सिंटैक्स है। यदि मैं गलत हूं तो मुझे सही करों।
xameeramir

1
@ pb2q new {id = id}सिर्फ इसलिए काम करता है क्योंकि फ्रेमवर्क जानता है कि आप किस चर का उल्लेख कर रहे हैं।
एडवर्ड

61

यह भी ध्यान देने योग्य है कि आप 1 से अधिक पैरामीटर से गुजर सकते हैं। आईडी का उपयोग URL का हिस्सा बनाने के लिए किया जाएगा और किसी अन्य को एक के बाद पैरामीटर के रूप में पारित किया जाएगा? url में और डिफ़ॉल्ट रूप से UrlEncoded होगा।

जैसे

return RedirectToAction("ACTION", "CONTROLLER", new {
           id = 99, otherParam = "Something", anotherParam = "OtherStuff" 
       });

तो यूआरएल होगा:

    /CONTROLLER/ACTION/99?otherParam=Something&anotherParam=OtherStuff

ये आपके नियंत्रक द्वारा संदर्भित किए जा सकते हैं:

public ActionResult ACTION(string id, string otherParam, string anotherParam) {
   // Your code
          }


39

MVC 4 उदाहरण ...

ध्यान दें कि आपको हमेशा आईडी नाम का पैरामीटर पास नहीं करना होगा

var message = model.UserName + " - thanks for taking yourtime to register on our glorious site. ";
return RedirectToAction("ThankYou", "Account", new { whatever = message });

तथा,

public ActionResult ThankYou(string whatever) {
        ViewBag.message = whatever;
        return View();
} 

बेशक, यदि आप अपनी प्राथमिकता है, तो ViewBag का उपयोग करने के बजाय मॉडल फ़ील्ड में स्ट्रिंग असाइन कर सकते हैं।


24

यदि आपका पैरामीटर एक जटिल ऑब्जेक्ट होता है, तो यह समस्या को हल करता है । प्रमुख RouteValueDictionaryनिर्माणकर्ता है।

return RedirectToAction("Action", new RouteValueDictionary(Model))

यदि आप संग्रह करते हैं, तो यह इसे थोड़ा पेचीदा बनाता है, लेकिन यह अन्य उत्तर बहुत अच्छी तरह से कवर करता है


21
RedirectToAction("Action", "Controller" ,new { id });

मेरे लिए काम किया, करने की जरूरत नहीं थी new{id = id}

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


RedirectToAction("Action", "Controller", new { id = id});बस मुझे अपने कोर 3.1 ऐप में क्या चाहिए था।
orangecaterpillar

18

यदि कोई त्रुटि संदेश दिखाना चाहता है [httppost]तो वह आईडी का उपयोग करके पास कर सकता है

return RedirectToAction("LogIn", "Security", new { @errorId = 1 });

इस तरह के विवरण के लिए

 public ActionResult LogIn(int? errorId)
        {
            if (errorId > 0)
            {
                ViewBag.Error = "UserName Or Password Invalid !";
            }
            return View();
        }

[Httppost]
public ActionResult LogIn(FormCollection form)
        {
            string user= form["UserId"];
            string password = form["Password"];
            if (user == "admin" && password == "123")
            {
               return RedirectToAction("Index", "Admin");
            }
            else
            {
                return RedirectToAction("LogIn", "Security", new { @errorId = 1 });
            }
}

आशा है कि यह ठीक काम करेगा।


16

....

int parameter = Convert.ToInt32(Session["Id"].ToString());

....

return RedirectToAction("ActionName", new { Id = parameter });

15

मैं इस मुद्दे के रूप में अच्छी तरह से किया था, और अगर आप एक ही नियंत्रक के भीतर कर रहे हैं यह करने के लिए एक अच्छा तरीका नामित मापदंडों का उपयोग है:

return RedirectToAction(actionName: "Action", routeValues: new { id = 99 });

7

यह वर्षों पहले हो सकता है, लेकिन वैसे भी, यह आपके Global.asax मानचित्र मार्ग पर भी निर्भर करता है क्योंकि आप जो चाहते हैं उसे फिट करने के लिए मापदंडों को जोड़ या संपादित कर सकते हैं।

जैसे।

Global.asax

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            //new { controller = "Home", action = "Index", id = UrlParameter.Optional 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional,
                  extraParam = UrlParameter.Optional // extra parameter you might need
        });
    }

फिर आपको जिन मापदंडों से गुजरना होगा वह बदल जाएगा:

return RedirectToAction( "Main", new RouteValueDictionary( 
    new { controller = controllerName, action = "Main", Id = Id, extraParam = someVariable } ) );

7

यदि आपकी जरूरत नियंत्रक के बाहर एक कार्रवाई पर पुनर्निर्देशित करने की है तो यह काम करेगा।

return RedirectToAction("ACTION", "CONTROLLER", new { id = 99 });

1

निम्नलिखित asp.net कोर 2.1 के साथ सफल हुआ। यह कहीं और लागू हो सकता है। शब्दकोश कंट्रोलरबेसे.कंट्रोलरकोटेक्स्ट.आउटडेटा.वायु एक्शन पद्धति के भीतर से सीधे पहुंच योग्य और लिखने योग्य है। शायद यह अन्य समाधानों में डेटा का अंतिम गंतव्य है। यह भी दिखाता है कि डिफ़ॉल्ट रूटिंग डेटा कहां से आता है।

[Route("/to/{email?}")]
public IActionResult ToAction(string email)
{
    return View("To", email);
}
[Route("/from")]
public IActionResult FromAction()
{
    ControllerContext.RouteData.Values.Add("email", "mike@myemail.com");
    return RedirectToAction(nameof(ToAction));
         // will redirect to /to/mike@myemail.com
}
[Route("/FromAnother/{email?}")]`
public IActionResult FromAnotherAction(string email)
{
    return RedirectToAction(nameof(ToAction));
         // will redirect to /to/<whatever the email param says>
         // no need to specify the route part explicitly
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.