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



我一直在到处寻找这个问题的答案,但似乎找不到任何答案。我基本上有一个MVC应用程序设置,并且我使用内置的AttributeRouting作为路由。

文件夹结构如下所示;

  • 型号
  • 视图
  • 控制器
  • 区域
    • 成员
      • 成员区域注册.cs
      • 控制器
        • HomeController.cs
      • 视图
        • 主页
          • 帐户.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"或其主视图,或者没有视图引擎支持搜索到的位置。以下地点已搜索:

~/Views/Home/Account.aspx

~/Views/Home/Account.ascx

~/Views/Shared/Account.aspx

~/Views/Shared/Account.ascx

~/Views/Home/Account.cshtml

~/Views/Home/Account.vbhtml

~/Views/Shared/Account.cshtml

~/Views/Shared/Account.vbhtml

所有人都认为,这应该很好——如果不是,我希望~/area至少在它试图搜索的路径上。为了实现这个功能,我需要额外布线吗?

我正在使用ASP.NET MVC 5.0

如果I硬编码视图的绝对路径,它就可以工作。显然,这不是一个好情况。我更希望它能找到不符合惯例的观点。但若我键入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就不知道它在哪个区域,因此不知道在哪里查找视图。

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(); }
}

相关内容

  • 没有找到相关文章