2010-12-14 7 views
9

मैं एक पेज मार्ग बनाया है तो मैं कुछ WebForms उन पृष्ठों को अपने प्रोजेक्ट में मौजूद के साथ मेरी MVC आवेदन एकीकृत कर सकते हैं:MVC MapPageRoute और ActionLink

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    // register the report routes 
    routes.MapPageRoute("ReportTest", 
     "reports/test", 
     "~/WebForms/Test.aspx" 
    ); 

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

यह एक समस्या पैदा कर दी है जब भी मैं में Html.ActionLink का उपयोग मेरी दृश्य:

<%: Html.ActionLink("Home", "Index", "Home") %> 

जब मैं ब्राउज़र लिंक की तरह दिखाई देता में पृष्ठ लोड:

http://localhost:12345/reports/test?action=Index&controller=Home 

क्या कोई इस से पहले भाग गया है? मैं इसे कैसे ठीक करूं?

उत्तर

5

मेरा अनुमान है कि आपको MapPageRoute घोषणा में कुछ पैरामीटर विकल्प जोड़ने की आवश्यकता है। तो यदि आपके पास WebForms निर्देशिका में एक से अधिक वेबफॉर्म पेज हैं तो यह अच्छी तरह से काम करता है।

routes.MapPageRoute ("ReportTest", 
         "reports/{pagename}", 
         "~/WebForms/{pagename}.aspx"); 

पुनश्च: आप भी RouteCollection

की RouteExistingFiles संपत्ति पर एक नज़र उपयोग करने के लिए

<%=Html.RouteLink("Home","Default", new {controller = "Home", action = "Index"})%> 
+2

धन्यवाद। मैं केवल ब्रेवटी के लिए रूटलिंक का उपयोग करने से बचना चाहता था लेकिन मुझे इसे इस्तेमाल करना पड़ सकता है। मैं समझ नहीं पा रहा हूं कि जब मैं एक्शनलिंक का उपयोग करता हूं तो पृष्ठ मार्ग मेरे नियमित मार्गों से क्यों मेल खाता है। – Dismissile

5

मैं सिर्फ एक बहुत समान मुद्दा था एक वैकल्पिक हो जाएगा कर सकते हैं। मेरा समाधान राउटिंग सिस्टम को एक्शनलिंक के लिए मैचों की तलाश करते समय पेज रूट को अस्वीकार करने का एक कारण देना था।

विशेष रूप से, आप जेनरेट किए गए यूआरएल में देख सकते हैं कि एक्शनलिंक दो पैरामीटर बनाता है: नियंत्रक और क्रिया। हम अपने "मानक" मार्ग (~/नियंत्रक/एक्शन/आईडी) को पृष्ठ मार्ग से मेल नहीं करने के लिए एक विधि के रूप में उपयोग कर सकते हैं।

पैरामीटर के साथ पृष्ठ मार्ग में स्थैतिक "रिपोर्ट" को प्रतिस्थापित करके हम "नियंत्रक" को कॉल करेंगे और फिर एक बाधा जोड़कर "नियंत्रक" होना चाहिए "रिपोर्ट" हमें हमारी रिपोर्ट के लिए एक ही पृष्ठ मार्ग मिलता है, लेकिन एक नियंत्रक पैरामीटर के साथ कुछ भी अस्वीकार करें जो "रिपोर्ट" नहीं है।

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    // register the report routes 
    // the second RouteValueDictionary sets the constraint that {controller} = "reports" 
    routes.MapPageRoute("ReportTest", 
     "{controller}/test", 
     "~/WebForms/test.aspx", 
     false, 
     new RouteValueDictionary(), 
     new RouteValueDictionary { { "controller", "reports"} }); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 
संबंधित मुद्दे