我在各处搜寻答案,但似乎找不到。我的 MVC 应用程序已经设置好,并且我正在使用内置的 AttributeRouting
来处理路由。
我的文件夹结构如下:
- Models
- Views
- Controllers
- Areas
- Member
- MemberAreaRegistration.cs
- Controllers
- HomeController.cs
- Views
- Home
- Account.cshtml
- Home
- Member
然后我在 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。
如果我硬编码视图的绝对路径,它可以工作。显然这不是一个好的方案,我更希望它能够按照约定查找视图。但如果我键入 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" }
);
}
}