2012-09-07 11 views
6

मेरे पास कई मार्गों के साथ एक एमवीसी 3 ऐप है। उनमें से दो इस तरह परिभाषित कर रहे हैं:यूआरएल.एक्शन अपेक्षित परिणाम नहीं देता है। अनचाहे मार्ग मान

routes.MapRoute(
    null, 
    "System/{name}", // URL with parameters 
    new { controller = "Systems", action = "Index" } // Parameter defaults 
); 
routes.MapRoute(
    null, 
    "Carrier/{name}", // URL with parameters 
    new { controller = "Carriers", action = "Index" } // Parameter defaults 
); 

अब, मेरे मेनू में मुझे लगता है कि Url.Action का उपयोग कर बनाई गई हैं इन मार्गों को दो लिंक है:

Url.Action("Index","Systems") 
Url.Action("Index","Carriers") 

अब जब मैं आवेदन शुरू, सब कुछ ठीक लगता है, और मेनू में लिंक /System/ और /Carrier/ के रूप में दिखाए जाते हैं, और यह अपेक्षित मूल्य है।

हालांकि, जब मैं वेब पेज में उदाहरण /System/MySystem के लिए करने के लिए ब्राउज़ करें मैं अभी भी लिंक एक ही जगह पर बात करने के लिए चाहते हो जाएगा, लेकिन अब वे /System/MySystem और /Carrier/MySystem को इंगित।

मैंने लिंक मूल्य से नाम का उपयोग करने से लिंक रखने के लिए कई चीजों की कोशिश की है, लेकिन इसका कोई फायदा नहीं हुआ है। अजीब मामले मैं अनुभव था, जब मैं इस की कोशिश की:

Url.Action("Index","Systems", new{name = (string)null}) 

अब लिंक

/System?name=MySystem 

के रूप में दिखाई कि यहां किसी भी अच्छा तरीका यह सुनिश्चित करें कि मार्ग मूल्यों से नाम मूल्य नहीं है बनाने के लिए कर रहे हैं किसी भी तरह से इन लिंक के साथ interfer?

उत्तर

6

जैसा कि आपने देखा है कि Url. सहायक पहले दिए गए मार्ग पैरामीटर का पुन: उपयोग करते हैं।

एक समाधान (मुझे आशा है कि एक और अधिक सुरुचिपूर्ण समाधान है कि वहाँ ...) यदि आप अपने ध्यान में रखते हुए RouteData.Values से name प्रविष्टि को हटा सकते हैं के रूप में:

तो तुम Url.Action आपके विचार में कॉल करने से पहले:

Url.Action("Index","Systems") 
Url.Action("Index","Carriers") 

निकालें पहले से भरी हुई nameRequestContext से:

@{ 
    Request.RequestContext.RouteData.Values.Remove("name"); 
} 

यह als ओ एक वैकल्पिक हल लेकिन अगर आप थोड़ा अपने name खंड के लिए एक डिफ़ॉल्ट शून्य मान प्रदान करने के साथ अपने मार्गों को संशोधित:

routes.MapRoute(
    null, 
    "System/{name}", // URL with parameters 
    new { controller = "Systems", action = "Index", name = (string)null } 
); 
routes.MapRoute(
    null, 
    "Carrier/{name}", // URL with parameters 
    new { controller = "Carriers", action = "Index", name = (string)null } 
); 

आपका मूल समाधान ("nulling" Url.Action में name) भी काम करेगा:

@Url.Action("Index", "Systems" , new {name = (string)null}) 
+0

मैं कुछ और सुरुचिपूर्ण के लिए भी उम्मीद कर रहा था, लेकिन कम से कम यह काम पूरा हो जाता है। धन्यवाद। –

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