5

में रीडायरेक्ट टॉक्शन में सेटिंग क्वेरी स्ट्रिंग को मुझे redirecttoaction को अलग-अलग पैरा के साथ एएसपीएनटी एमवीसी व्यू में कॉल करना होगा, दृश्य के रेफरर पेज (ग्रिड की स्थिति) से निकाला गया है।एएसपीनेट एमवीसी

मेरे पास (एक छिपे हुए क्षेत्र में) क्वेरी स्ट्रिंग की सामग्री (कभी-कभी खाली, कभी-कभी 2 पैरामीटर के साथ) और इसलिए मुझे रूट मान सरणी बनाने में समस्याएं होती हैं।

क्या कुछ सहायक हैं, जो मुझे एक क्वेरी स्ट्रिंग को रूट वैल्यू सरणी बदलने में मदद करते हैं? कुछ की तरह:

string querystring ="sortdir=asc&pag=5"; 
return RedirectToAction("Index", ConvertToRouteArray(querystring)); 
+0

http://stackoverflow.com/questions/1067200/how-to-add-querystring-values-with-redirecttoaction- देखना विधि एलक्यू = 1 – MVCdragon

+0

[इस समाधान है, आप की मदद करनी चाहिए] [1] [1]: http://stackoverflow.com/questions/1067200/how-to-add-querystring-values -with-redirecttoaction-method? lq = 1 – MVCdragon

उत्तर

8

बनाने के लिए एक सामान्य समाधान एक शब्दकोश के लिए और RouteValueDictionary को शब्दकोश में अपनी क्वेरी स्ट्रिंग परिवर्तित करते हैं। RedirectToAction("actionName", {object with properties}) का उपयोग करने का

var parsed = HttpUtility.ParseQueryString(temp); 
Dictionary<string,object> querystringDic = parsed.AllKeys 
    .ToDictionary(k => k, k => (object)parsed[k]); 

return RedirectToAction("Index", new RouteValueDictionary(querystringDic)); 
+0

यह सिर्फ एक उदाहरण है, probl एम यह है कि क्वेरीस्ट्रिंग पैरामीटर की संख्या में भी प्रत्येक कॉल पर परिवर्तनीय है, इसलिए मुझे एक सामान्य समाधान –

+0

मिलना है, मैंने अपना जवाब सामान्य समाधान में बदल दिया है। – Erwin

+1

नया भूल गया: रिटर्न रीडायरेक्ट टॉक्शन ("इंडेक्स", नया रूटवेल्यू डिक्शनरी (querystringDic)); –

2

एक सीमा है कि RedirectToAction() कोई अधिभार जो RedirectToAction(ActionResult(), {object with properties}) स्वीकार करता है, तो आप कार्रवाई का नाम (और संभवतः नियंत्रक नाम) के लिए जादू तार का उपयोग करने के लिए मजबूर कर रहे हैं।

आप T4MVC library, यह दो धाराप्रवाह एपीआई सहायक विधियों (AddRouteValue(...) और AddRouteValues(...)) आप आसानी से किसी क्वेरी स्ट्रिंग पैरामीटर जोड़ने के लिए सक्षम है, जो एक वस्तु के सभी गुण, या पूरी Request.QueryString का उपयोग करते हैं। आप इन तरीकों को या तो टी 4 एमवीसी की अपनी एक्शन रिसैट ऑब्जेक्ट्स पर या सीधे रीडायरेक्ट टॉक्शन() विधि पर कॉल कर सकते हैं। बेशक, टी 4 एमवीसी जादू तारों से छुटकारा पाने के बारे में सब कुछ है!

एक उदाहरण के रूप: आप एक गैर प्रमाणीकृत अनुरोध के लिए एक प्रवेश पृष्ठ पर रीडायरेक्ट करने, और एक क्वेरी स्ट्रिंग पैरामीटर ताकि आप सफल प्रवेश के बाद वहाँ कूद कर सकते हैं के रूप में मूल रूप से अनुरोध किया गया URL पारित करने के लिए चाहते हैं। निम्न सिंटैक्स उदाहरण के किसी भी काम करेगा:

return RedirectToAction(MVC.Account.LogOn()).AddRouteValue(@"returnUrl", HttpUtility.UrlEncode(Request.RawUrl)); 

या

return RedirectToAction(MVC.Account.LogOn().AddRouteValue(@"returnUrl", HttpUtility.UrlEncode(Request.RawUrl)));