Tôi đã tìm kiếm câu trả lời cho điều này ở khắp mọi nơi, nhưng tôi dường như không thể tìm thấy bất kỳ. Tôi về cơ bản có một thiết lập ứng dụng MVC và tôi đang sử dụng được xây dựng trong AttributeRouting
cho các tuyến đường của tôi.ASP.NET MVC - Định tuyến thuộc tính không tìm kiếm khu vực xem
Cấu trúc thư mục trông như thế này;
- Models
- Lần
- Controller
- khu vực
- Member
- MemberAreaRegistration.cs
- Controller
- HomeController.cs
- Lần
- Home
- Account.cshtml
- Home
- Member
Và sau đó tôi dây lên các tuyến đường của tôi trong global.asax
như thế này;
public class Application : System.Web.HttpApplication {
protected void Application_Start(){
AreaRegistration.RegisterAllAreas();
// other web optimization stuff
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
Vì vậy, MemberAreaRegistration.cs
thật đơn giản.
namespace App.Web.Areas.Member {
public class MemberAreaRegistration: AreaRegistration {
public override string AreaName { get { return "Member"; } }
}
public override void RegisterArea(AreaRegistrationContext context){ }
}
Và tôi cố gắng để dây nó bằng cách sử dụng các thuộc tính ...
/areas/member/controllers/homecontroller.cs
// ...
[Route("member/account")]
public ActionResult Account() { return View(); }
// ...
Vấn đề là điều này tìm thấy con đường, nhưng nó không thể tìm ra xem. Tôi nhận được lỗi sau đây;
Chế độ xem 'Tài khoản' hoặc không thể tìm thấy tài khoản chính hoặc không có công cụ xem hỗ trợ vị trí được tìm kiếm. Các vị trí sau được tìm kiếm:
~/Views/Home/Account.aspx
~/Views/Home/Account.ascx
~/Views/Shared/Account.aspx
~/Views/Shared/Account.ascx
~/Views/Home/Account.cshtml
~/Views/Home/Account.vbhtml
~/Lượt xem/Chia sẻ/Tài khoản.cshtml
~/Views/Shared/Account.vbhtml
Bằng tất cả tài khoản, điều này sẽ làm việc tốt - và nếu không, tôi hy vọng các ~/area
để ít nhất là trong con đường nó đang cố gắng để tìm kiếm. Tôi có phải thêm một thứ gì đó để thực hiện chức năng này không?
Tôi đang sử dụng ASP.NET MVC 5,0
Nếu tôi hardcode đường dẫn tuyệt đối của xem, nó hoạt động. Rõ ràng đây không phải là một tình huống tốt mặc dù. Tôi muốn nó tìm ra quan điểm ngoài quy ước. Nhưng nếu tôi nhập return View("~/areas/member/views/home/account.cshtml");
tôi sẽ xem lại - vì vậy tôi biết nó có thể truy cập vào tệp và điều đó là chính xác.
Đây là
RouteConfig.cs RouteConfig.cs
tôi theo yêu cầu
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" }
);
}
}
Có! Điều đó dường như đã giải quyết nó! – Ciel