2012-02-03 13 views
9

का उपयोग कर एक क्रिया में एक स्ट्रिंग पैरामीटर पास करना मैं जानना चाहता हूं कि RedirectToAction() का उपयोग कर स्ट्रिंग पैरामीटर को कैसे पास करना है।एएसपी.नेट एमवीसी: RedirectToAction()

चलो कहते हैं कि मैं इस मार्ग करते हैं:

routes.MapRoute(
    "MyRoute", 
    "SomeController/SomeAction/{id}/{MyString}", 
    new { controller = "SomeController", action = "SomeAction", id = 0, MyString = UrlParameter.Optional } 
); 

और SomeController में, मैं एक पुनर्निर्देशन कर एक कार्रवाई के रूप में निम्नानुसार है:

return RedirectToAction("SomeAction", new { id = 23, MyString = someString }); 

मैं someString के साथ इस पुनर्निर्देशन की कोशिश की = "@ # $%? & * 1 "और यह हमेशा विफल रहता है, इससे कोई फर्क नहीं पड़ता कि मैं स्ट्रिंग को एन्कोड करता हूं। मैंने इसे HttpUtility.UrlEncode (someString), HttpUtility.UrlPathEncode (someString) के साथ एन्कोड करने का प्रयास किया, और Uri.EscapeUriString (someString) के साथ कोई फायदा नहीं हुआ।

इसलिए मैंने कुछ स्ट्रिंग पास करने के लिए हमें टेम्पाडाटा का सहारा लिया, लेकिन फिर भी, मैं जानना चाहता हूं कि काम से ऊपर कोड कैसे बनाना है, बस मेरी जिज्ञासा को पूरा करने के लिए।

+0

क्या आपने 'rest.rlInfileSystemMapping' और' requestPathInvalidCharacters' को 'web.config' में बदल दिया है? –

+0

@EricYin नहीं, मैंने नहीं किया है। मैं इन दो मानकों से अवगत नहीं था। मैं उन्हें देख लूंगा। –

उत्तर

3

मुझे लगता है कि यह समस्या आपके रूट ऑर्डर में या आपके नियंत्रक में हो सकती है। यहां कुछ कोड है जो मुझे काम करने के लिए मिला है।

मार्ग परिभाषाएँ

 routes.MapRoute(
      "TestRoute", 
      "Home/Testing/{id}/{MyString}", 
      new { controller = "Home", action = "Testing", id = 0, MyString = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

// note how the TestRoute comes before the Default route 

नियंत्रक कार्रवाई के तरीके

public ActionResult MoreTesting() 
    { 
     return RedirectToAction("Testing", new { id = 23, MyString = "Hello" }); 
    } 

    public string Testing(int id, string MyString) 
    { 
     return id.ToString() + MyString; 
    } 

जब मैं /Home/MoreTesting ब्राउज़ मैं वांछित अपने ब्राउज़र में उत्पादन के लिए "23Hello" के उत्पादन मिलता है। क्या आप अपने मार्ग और अपने नियंत्रक कोड पोस्ट कर सकते हैं?

+2

मेरा कोड MyString = "हैलो" के साथ काम करेगा। समस्या विशेष पात्रों के साथ है। MyString = "! @ # $%? & * 1" के साथ आज़माएं, आप देखेंगे कि मेरा क्या मतलब है। –

2

ठीक है, मुझे पता है कि यह प्रश्न कुछ दिन पुराना है, लेकिन मुझे यकीन नहीं था कि आपको यह समस्या हल हो गई है या नहीं, इसलिए मैंने देखा। मैंने थोड़ी देर के लिए इस के साथ खेला और समस्या यह है कि आप इसे कैसे हल कर सकते हैं।

समस्या आप कर रहे हैं

समस्या% चरित्र है कि विशेष वर्ण के कारण मुद्दों कई (मुझे लगता है कि 20) इस तरह के% के रूप में और विशेष वर्ण, "में से एक रहे हैं।

अपने उदाहरण में। के रूप में Priyankhere द्वारा ने कहा:

मार्ग मूल्यों URL स्ट्रिंग के हिस्से के रूप पोस्ट कर रहे हैं

यूआरएल स्ट्रिंग (स्ट्रिंग paramete क्वेरी नहीं। आर)% (% 25), "(% 22) और इतने पर संभाल नहीं सकता है। इसके अलावा, के रूप में Lee Gunn एक ही पोस्ट में से ने कहा: http://localhost:1423/Home/Testing/23/!%40%23%24%25%3f%26 *% 201 - (इस को उड़ाने जाएगा)

तरीके इसे ठीक करने में से एक मार्ग मानचित्रण से {MyString} दूर करने के लिए है।अपने जड़ मानचित्रण बनाने के लिए इस तरह दिखेगा:

routes.MapRoute(
    "TestRoute", 
    "Home/Testing/{id}", 
    new { controller = "Home", action = "Testing", id = 0, MyString = UrlParameter.Optional } 
); 

इस कारण पोस्ट इस उत्पन्न करने के लिए होगा:

http://localhost:1423/Home/Testing/23?MyString=!%2540%2523%2524%2525%2B1

अब जब आप MyString सेट यह एक क्वेरी स्ट्रिंग पैरामीटर जो काम करता है में बदल दिया जाएगा पूरी तरह से ठीक। मैंने कोशिश की और यह काम किया।

Priyank भी एसओ पद मुझे लगता है कि ऊपर लिंक आप शायद एक कस्टम ValueProvider के साथ इस का समाधान कर सकता है, लेकिन आप यह है कि अगर कुछ है कि आप पर लागू होता है की जाँच करने के लिए अपने लिंक किए गए लेख उनके पालन करना होगा में उल्लेख किया है।

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