2015-04-08 15 views
6

मैं हर जगह इसके लिए उत्तर खोज रहा हूं, लेकिन मुझे कोई भी प्रतीत नहीं होता है। मेरे मूल रूप से एक एमवीसी अनुप्रयोग सेटअप है और मैं अपने मार्गों के लिए AttributeRouting में निर्मित का उपयोग कर रहा हूं।एएसपी.नेट एमवीसी - विशेषता रूटिंग क्षेत्र दृश्य नहीं ढूंढ रहा

फ़ोल्डर संरचना इस तरह दिखती है;

  • मॉडल
  • दृश्य
  • नियंत्रकों
  • क्षेत्रों
    • सदस्य
      • MemberAreaRegistration.cs
      • नियंत्रकों
        • HomeController.cs
      • दृश्य
        • होम
          • Account.cshtml

और global.asax में मेरे मार्गों फिर मैं ऊपर तार इस तरह;

public class Application : System.Web.HttpApplication { 
    protected void Application_Start(){ 
     AreaRegistration.RegisterAllAreas(); 
     // other web optimization stuff 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
    } 
} 

तो फिर, MemberAreaRegistration.cs सरल है।

namespace App.Web.Areas.Member { 
    public class MemberAreaRegistration: AreaRegistration { 
     public override string AreaName { get { return "Member"; } } 
    } 
    public override void RegisterArea(AreaRegistrationContext context){ } 
} 

और मैं विशेषताओं का उपयोग यह तार करने की कोशिश ...

/areas/member/controllers/homecontroller.cs

// ... 
[Route("member/account")] 
public ActionResult Account() { return View(); } 
// ... 

समस्या यह है कि इस मार्ग पाता है, लेकिन यह दृश्य नहीं मिल रहा। मुझे निम्नलिखित त्रुटि मिलती है;

देखें 'खाता' या उसका मास्टर नहीं मिला या कोई दृश्य इंजन खोजे गए स्थानों का समर्थन करता है। निम्न स्थानों खोजा गया:

~/दृश्य/होम/Account.aspx

~/दृश्य/होम/Account.ascx

~/दृश्य/साझा/Account.aspx

~/दृश्य/साझा/Account.ascx

~/दृश्य/होम/Account.cshtml

~/दृश्य/होम/Account.vbhtml

~/विचार/साझा/खाता।cshtml

~/दृश्य/साझा/Account.vbhtml

सभी खातों से, यह ठीक काम करना चाहिए - और यदि नहीं, तो मैं उम्मीद ~/area कम से कम पथ यह खोज करने के लिए कोशिश कर रहा है में किया जाना है। क्या मुझे इस समारोह को बनाने के लिए कुछ अतिरिक्त तार करना है?

मैं ASP.NET MVC का उपयोग कर रहा मैं देखने के निरपेक्ष पथ को हार्डकोड 5,0

है, यह काम करता है। जाहिर है यह हालांकि एक अच्छी स्थिति नहीं है। मैं इसे सम्मेलन से बाहर देखने के लिए पसंद करूंगा। लेकिन अगर मैं return View("~/areas/member/views/home/account.cshtml"); टाइप करता हूं तो मुझे दृश्य वापस मिल जाता है - इसलिए मुझे पता है कि यह फ़ाइल तक पहुंच सकता है और यह सही है।

यहाँ मेरी RouteConfig.cs अनुरोध के अनुसार

RouteConfig.cs है

public class RouteConfig { 
    public static void RegisterRoutes(RouteCollection routes) { 
     // mvc attribute routing allows us to supersede normal routing mechanisms and 
     // declare our routes a bit more verbosely 
     routes.MapMvcAttributeRoutes(); 

     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new[] { "App.Web.Controllers" } 
     ); 
    } 
} 

उत्तर

17

, क्योंकि एक बार आप एक कार्रवाई के विशेषता के रूप में अपने मार्ग को परिभाषित कर रहे हैं, ASP.NET MVC पता नहीं है जो इस क्षेत्र में यह है कि में, इसलिए यह नहीं पता कि दृश्यों को कहां देखना है।

नियंत्रक में Account कार्रवाई में है, RouteArea विशेषता स्पष्ट रूप से निर्दिष्ट करने का प्रयास करें।

मैं अपने सिर के ऊपर से इस लिख रहा हूँ, लेकिन यह तरह दिखना चाहिए:

[RouteArea("Member")] 
[RoutePrefix("member")] 
public class HomeController: Controller { 
    [Route("account")] 
    public ActionResult Account() { return View(); } 
} 

या, वैकल्पिक:

[RouteArea("Member")] 
public class HomeController: Controller { 
    [Route("member/account")] 
    public ActionResult Account() { return View(); } 
} 
+1

हाँ! ऐसा लगता है कि इसे हल किया गया है! – Ciel

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