属性路由不能找到区域视图

我一直在寻找这个地方的答案,但我似乎无法找到任何答案。 我基本上有一个MVC应用程序设置,我使用内置的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

    〜/查看/共享/ Account.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" }
            );
        }
    }
    

    这是因为,一旦将路由定义为动作的属性,ASP.NET MVC就不知道它处于哪个区域,因此它不知道在哪里查找Views。

    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(); }
    }
    
    链接地址: http://www.djcxy.com/p/80093.html

    上一篇: Attribute Routing not finding area view

    下一篇: How to correctly use Html.ActionLink with ASP.NET MVC 4 Areas