ASP.NET MVC - 属性路由未找到区域视图

Cie*_*iel 9 asp.net-mvc asp.net-mvc-routing

我一直在寻找各地的答案,但我似乎找不到任何答案.我基本上有一个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);
   }
}
Run Code Online (Sandbox Code Playgroud)

那么,MemberAreaRegistration.cs很简单.

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

我尝试使用属性连接它...

/areas/member/controllers/homecontroller.cs

// ...
[Route("member/account")]
public ActionResult Account() { return View(); }
// ...
Run Code Online (Sandbox Code Playgroud)

问题是这找到了路由,但找不到视图.我收到以下错误;

未找到"帐户"视图或其主视图,或者视图引擎不支持搜索的位置.搜索了以下位置:

〜/浏览/首页/ 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" }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

And*_*ena 22

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

在Controller中Account操作,尝试显式指定RouteArea属性.

我正在写这篇文章,但看起来应该是这样的:

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

或者,或者:

[RouteArea("Member")]
public class HomeController: Controller {
    [Route("member/account")]
    public ActionResult Account() { return View(); }
}
Run Code Online (Sandbox Code Playgroud)