2008-08-15 9 views
13

मैं एमवीसी (और एएसपी.Net रूटिंग) के लिए नया हूं। मैं * .aspx को PageController नामक नियंत्रक को मैप करने का प्रयास कर रहा हूं।एएसपी.NET एमवीसी मार्ग मैपिंग

routes.MapRoute(
    "Page", 
    "{name}.aspx", 
    new { controller = "Page", action = "Index", id = "" } 
); 

नहीं चाहेंगे PageController के लिए ऊपर नक्शा * .aspx कोड? जब मैं किसी .aspx पेज मैं निम्नलिखित त्रुटि मिलती है में इस और प्रकार चला:

The controller for path '/Page.aspx' could not be found or it does not implement the IController interface. Parameter name: controllerType

वहाँ कुछ मैं यहाँ नहीं कर रहा हूँ है?

उत्तर

6

I just answered my own question. I had the routes backwards (Default was above page).

हाँ, आप डिफ़ॉल्ट मार्ग से ऊपर सभी कस्टम मार्गों पर रखना होगा।

So this brings up the next question... how does the "Default" route match (I assume they use regular expressions here) the "Page" route?

डिफ़ॉल्ट मार्ग मिलान जो हम कॉन्फ़िगरेशन पर कन्वेंशन कहते हैं उसके आधार पर मेल खाते हैं। स्कॉट गुथरी एएसपी.नेट एमवीसी पर अपने पहले ब्लॉग पोस्ट में अच्छी तरह से बताते हैं। मैं अनुशंसा करता हूं कि आप इसे और उसके अन्य पदों के माध्यम से पढ़ लें। ध्यान रखें कि इन्हें पहले सीटीपी के आधार पर पोस्ट किया गया था और ढांचा बदल गया है। आप स्कॉट हंसेलमैन द्वारा एएसपीनेट साइट पर एएसपी.नेट एमवीसी पर वेब कास्ट भी पा सकते हैं।

0

यह सुनिश्चित नहीं है कि आपका नियंत्रक कैसा दिखता है, त्रुटि इस तथ्य को इंगित करती है कि यह नियंत्रक नहीं ढूंढ सकता है। क्या आपने पेजकंट्रोलर क्लास बनाने के बाद नियंत्रक से वंचित किया था? क्या नियंत्रक निर्देशिका में स्थित पेज नियंत्रक है?

यहाँ Global.asax.cs

routes.MapRoute(
    "Page", 
    "{Page}.aspx", 
    new { controller = "Page", action = "Index", id = "" } 
); 

में मेरा मार्ग है यहाँ मेरी नियंत्रक, जो नियंत्रक फ़ोल्डर में स्थित है है:

using System.Web.Mvc; 

namespace MvcApplication1.Controllers 
{ 
    public class PageController : Controller 
    { 
     public void Index() 
     { 
      Response.Write("Page.aspx content."); 
     } 
    } 
} 
6

मैं सिर्फ अपनी ही सवाल का जवाब दे दिया। मेरे पास मार्ग पीछे थे (डिफ़ॉल्ट पृष्ठ से ऊपर था)। नीचे सही क्रम है। तो यह अगला प्रश्न उठाता है ... "डिफ़ॉल्ट" मार्ग मिलान (मुझे लगता है कि वे नियमित अभिव्यक्तियों का उपयोग कैसे करते हैं) "पृष्ठ" मार्ग कैसे करते हैं?

routes.MapRoute(
      "Page", 
      "{Name}.aspx", 
      new { controller = "Page", action = "Display", id = "" } 
     ); 

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

रोब Conery के MVC स्टोरफ्रंट screencasts में से एक के बारे में उन्होंने इस सटीक मुद्दे का सामना करना पड़ता। यदि आप रुचि रखते हैं तो यह लगभग 23 मिनट के निशान पर है।

0
public class AspxRouteConstraint : IRouteConstraint 
{ 
    #region IRouteConstraint Members 

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     return values["aspx"].ToString().EndsWith(".aspx"); 
    } 

    #endregion 
} 

सभी aspx

routes.MapRoute("all", 
       "{*aspx}",//catch all url 
       new { Controller = "Page", Action = "index" }, 
       new AspxRouteConstraint() //return true when the url is end with ".aspx" 
       ); 

के लिए मार्ग रजिस्टर और तुम MvcRouteVisualizer

द्वारा मार्गों परीक्षण कर सकते हैं
संबंधित मुद्दे