2011-07-20 12 views
20

मैं एक आंशिक कार्रवाई से सीधे लेआउट के लिए एक मेनू प्रतिपादन कर रहा हूँ, का उपयोग करने में "एरिया =?":T4MVC @ Url.Action (MVC.Controller.Action()) रेंडर पैरामीटर QueryString

@Html.Action(MVC.Menu.Index()) 

यह कार्रवाई, निर्धारित करता है कि कौन सा मेनू प्रस्तुत करने के लिए आंशिक है। उदाहरण के लिए, एक सार्वजनिक मेनू आंशिक। इन partials के भीतर, मैं भी T4MVC उपयोग कर रहा हूँ लिंक रेंडर करने के लिए:

<ul id="navHolder"> 
<li class="level1"> 
    <ul class="mainMenu"> 
     <li><b>@Html.ActionLink("Welcome", MVC.Home.Index())</b> 
      ... 

किसी कारण से, Urls T4MVC द्वारा प्रदान की गई शामिल हैं "क्षेत्र =?" अंत में:

<ul id="navHolder"> 
    <li class="level1"> 
     <ul class="mainMenu"> 
      <li><b><a href="/home/index?Area=">Welcome</a></b> 
       ... 

मेरे पास है नहीं मेरे प्रोजेक्ट के क्षेत्र और मैंने "IncludeAreasToken" सेटिंग को गलत पर बदल दिया है। विचित्र रूप से, यह केवल तभी होता है जब मैं "@ Html.Action" का उपयोग करके आंशिक रूप से प्रस्तुत करता हूं - यदि मैं इसे "@ HTML.Partial" के रूप में खींचता हूं तो पैरामीटर प्रदान नहीं किया जाता है और लिंक साफ़ और सही है। (मैं हालांकि एक आंशिक रूप में यह रेंडर करने के लिए नहीं करना चाहते हैं, ताकि नहीं करते हैं तो कृपया एक सुझाव के रूप,;)

किसी को भी वहाँ बाहर इस में पहले ही आ जाते?

उत्तर

10

कुछ अजीब यहाँ पर जा रहा है, और मुझे आश्चर्य है कि वहाँ जड़ में MVC बग किसी तरह का है अगर। यहां तक ​​कि T4MVC का उपयोग किए बिना, यदि ऐसा होता है, तो आप लिखते हैं:

@Html.ActionLink("Welcome", "Index", "Home", new { Area = "" }, null) 

एक नियमित रूप से विचार में, यह, फर्जी क्षेत्र = उत्पन्न नहीं करता है, जबकि एक Html.Action में फोन करता है?। मुझे किसी को टीम से पूछने की ज़रूरत है।

अभी के लिए, आप t4mvc.tt में इस लाइन (लाइन 310 के आसपास) को हटाने के द्वारा वैकल्पिक हल कर सकते हैं:

<# if (MvcVersion >= 2) { #>result.RouteValueDictionary.Add("Area", area ?? "");<# } #> 
+0

धन्यवाद - इससे मदद मिली। –

+0

मैंने अभी यह देखने के लिए एक चेक जोड़ा है कि क्या क्षेत्र प्रदान किया गया था, यदि ऐसा है तो मैं इसे शब्दकोश में जोड़ता हूं: 'if (! String.IsNullOrWhiteSpace (क्षेत्र)) {result.RouteValueDictionary.Add ("Area", area ?? "");} ' –

+0

@BradR: इस परिवर्तन के साथ समस्या यह है कि मुझे लगता है कि यह हमेशा सही नहीं होता है। जब आप किसी क्षेत्र दृश्य में हों और आप शीर्ष स्तर (गैर-क्षेत्र) दृश्य के लिए एक लिंक उत्पन्न करने का प्रयास कर रहे हैं, तो खाली क्षेत्र को पार करना वर्तमान क्षेत्र से बचने के लिए सही चीज है। लेकिन आपकी जांच के साथ ऐसा नहीं होगा। –

30

मैं एक बहुत ही आसान तरीके से इस मुद्दे को हल करने के लिए, बस सभी मार्गों कि नहीं कर रहे हैं करने के लिए जोड़कर इस क्षेत्र में खाली क्षेत्र मार्ग इस तरह:

routes.MapRoute(
"Default", 
"{controller}/{action}/{i​d}", 
new { controller = "Home", action = "Index", area = "", id = UrlParameter.Optional }); 
+0

बस इस परीक्षण किया है और यह सबसे आसान समाधान की तरह लगता है - सिर्फ एक जोड़ने स्ट्रिंग का क्षेत्रफल। डिफ़ॉल्ट मार्ग के लिए लक्षण और सभी यूआरएल सही ढंग से उत्पन्न होते हैं। –

+0

यह काम किया, धन्यवाद! –

+0

यह समाधान मेरे लिए काम करता है, बहुत आसान है। –

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