2008-12-05 15 views
10

मैं सी # के साथ एमवीसी में रूटिंग पर कुछ जानकारी ढूंढ रहा हूं। मैं वर्तमान में एमवीसी में रूटिंग की मूल बातें के बारे में बहुत जागरूक हूं, लेकिन जो मैं खोज रहा हूं वह कुछ मुश्किल है।एमवीसी रूटिंग - पैरामीटर नाम प्रश्न

प्रभावी रूप से, जो मैं खोजना चाहता हूं वह एक ही मार्ग को परिभाषित करने का एक तरीका है जो एक पैरामीटर लेता है।

सामान्य उदाहरण मैं ऑनलाइन पाया है सब उदाहरण

routes.MapRoute(
    "Default", 
    "{controller}.mvc/{action}/{id}" 
    new { controller = "Default", action="Index", id=""}); 

के आसपास आधारित है इस मार्ग मानचित्रण करके, आप किसी नियंत्रक में किसी भी कार्रवाई करने के लिए मैप कर सकते हैं, लेकिन आप कार्रवाई में कुछ भी पारित करने के लिए चाहते हैं, विधि पैरामीटर को "आईडी" कहा जाना चाहिए। यदि यह संभव हो तो मैं इसके चारों ओर एक रास्ता खोजना चाहता हूं, ताकि मुझे अपने कार्यों में एक अलग पैरामीटर नाम का उपयोग करने के लिए लगातार मार्ग निर्दिष्ट नहीं करना पड़े।

क्या कोई भी विचार है, या इसके आसपास एक रास्ता है?

उत्तर

0

आप के रूप में आप

routes.MapRoute(
    "Default", 
    "{controller}.mvc/{action}/{param1}/{param2}/{param3}" 
    new { controller = "Default", action="Index", param1="", param2="", param3=""}); 
इसके अलावा

, look at this post चाहते मार्गों का निर्माण कर सकते हैं, यह टिप्पणी अनुभाग में नमूनों की सभी प्रकार के होते हैं

+1

किंडा लापता बिंदु ... वह मूल रूप से करना चाहती है {नियंत्रक} .mvc:

याद रखें, ताकि मार्ग विशेषता का उपयोग करने के, यह आपके routeconfig फ़ाइल में ऊपर अपने परिभाषित मार्गों होना चाहिए/{action}/{*} जहां स्टार कोई पैरामीटर नाम है। –

+0

हाँ, धन्यवाद तीमुथियुस। यह सही है। शायद मैंने सवाल बहुत अच्छी तरह से नहीं किया था। – Jimmeh

+0

यह सुनिश्चित नहीं है कि आप क्या चाहते हैं, हो सकता है कि आप * प्रत्येक मान के लिए अनुरोध में अनुरोध कर सकते हैं। कॉन्टैक्ट.रौटडेटा। वैल्यूज * और उन्हें क्वियरिंग * वैल्यू। के * और * वैल्यू। वैल्यू * –

5

मुझे नहीं लगता है कि आप वास्तव में क्या कर रहे हैं कर सकते हैं करते हैं पूछ। जब एमवीसी एक क्रिया का आह्वान करता है तो यह मार्गों में पैरामीटर, अनुरोध पैरा और क्वेरी स्ट्रिंग की तलाश करता है। यह हमेशा पैरामीटर नाम से मेल खाता है।

शायद अच्छी पुरानी क्वेरी स्ट्रिंग आपकी आवश्यकताओं को पूरा करेगी।

~/mycontroller/myaction/?foobar=123 

इस कार्रवाई के लिए 123 पारित करेंगे:

public ActionResult MyAction(int? foobar) 
3

मैं जानता हूँ कि यह सदियों पहले है, लेकिन उम्मीद है कि यह अभी भी किसी को मदद मिलती है। मैंने पहले एक ही सवाल पूछा। मुझे लगता है कि तुम इसे खोज रहे हो। मेरे प्रश्न पोस्ट से उद्धृत एक उत्तर: "{* pathInfo} बिट को स्लग कहा जाता है। यह मूल रूप से एक वाइल्डकार्ड कह रहा है" इस बिंदु के बाद सब कुछ पथइन्फो नामक पैरामीटर में भरा हुआ है "। इस प्रकार यदि आपके पास" {resource} .axd है/{* pathInfo} "और इस तरह का यूआरएल: http://blah/foo.axd/foo/bar/baz/bing फिर दो पैरामीटर बनाए जाते हैं, जिसे संसाधन कहा जाता है, जिसमें फू शामिल होगा और जिसे पथइन्फो कहा जाता है जिसमें foo/bar/baz/bing शामिल है।"

+0

वास्तव में प्रश्न का उत्तर नहीं है, लेकिन +1 के लिए * -ऑप्शन – mhu

7

आप एक अलग पैरामीटर नाम करना चाहते हैं और एक ही मार्ग चर रखने के लिए, FromUri तो जैसे विशेषता का उपयोग करें:

public ActionResult MyView([FromUri(Name = "id")] string parameterThatMapsToId) 
{ 
    // do stuff 
} 

अपने मार्गों में, आप सभी की जरूरत है:

routes.MapRoute(
    "Default", 
    "{controller}.mvc/{action}/{id}" 
    new { controller = "Default", action="Index", id=""}); 
+0

क्या यह केवल वेब एपीआई के लिए नहीं है, एमवीसी नहीं? – SilverlightFox

+0

@ सिल्वरलाइटफॉक्स आप सही हैं, दुर्भाग्यवश दुर्भाग्य से वेब एपीआई है। ऐसा लगता है कि एमवीसी 5 में विशेषता रूटिंग है जो हालांकि मदद कर सकती है। – Curtis

0

हालांकि आप अभी भी FromUri विशेषता का उपयोग नहीं कर सकते हैं, फिर भी आप Route विशेषता का उपयोग कर सकते हैं, जैसे

[Route("~/Policy/PriorAddressDelete/{sequence}")] 
public ActionResult PriorAddressDelete(int sequence) 
{ 
    Policy.RemoveScheduledPriorAddressItem(sequence); 
    return RedirectToAction("Information", new { id = Policy.Id }); 
} 

तकनीकी रूप से यह एक नया मार्ग जोड़ता है, लेकिन कम से कम यह आपके routeconfig को अव्यवस्थित नहीं करता है। यह रूट परिभाषा को सही जगह पर रखता है जहां इसे उपयोग किया जाता है, जिसे मैं पसंद करता हूं (कम शिकार चीजें नीचे)।

routes.MapMvcAttributeRoutes(); 
संबंधित मुद्दे