Tôi có một ứng dụng ở đây với sự kết hợp của biểu mẫu web và mvc. Tôi chỉ định định tuyến như bên dướiHtml.ActionLink xây dựng liên kết sai khi một tuyến đường không phải là mvc được thêm
routes.Add("AspxRoute", new Route("Upload/New", new WebFormRouteHandler<Page>("~/Uploads.aspx")));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Vì vậy, đường dẫn ảo để "Tải lên/Mới" thực sự ánh xạ tới trang biểu mẫu web aspx.
Nhưng vấn đề của tôi là Html.ActionLink ("Test", "điều khiển", "Action") bây giờ làm cho
/Upload/điều khiển mới? = Điều khiển & Action = Hành động
Sau khi xem mã nguồn MVC, tôi hiểu rằng đó là do ActionLink gọi tới RouteCollection.GetVirtualPath(requestContext, routeName, mergedRouteValues), trong đó routeName được để trống. Và bằng cách nào đó điều này mặc định để sử dụng các tuyến đường AspxRoute để xây dựng các url. Tôi đã cố gắng để thêm một tuyến đường trước khi "AspxRoute", nhưng có vẻ như nó luôn luôn mặc định để không phải là một bộ định tuyến mvc.
Làm cách nào để RouteCollection.GetVirtualPath hoạt động khi routeName rỗng? Và tại sao nó hành xử theo cách này cho trường hợp của tôi?
Làm cách nào để tạo một url chính xác? Tôi có cần phải viết một phần mở rộng Htmlhelper mới không?
Cheers
Hi cảm ơn. Tôi biết RouteLink hoạt động, nhưng nó chỉ là một chút bất tiện! Tất cả các dây ma thuật. Tại sao ActionLink không hoạt động. –
Nó chỉ chứa một chuỗi hơn ActionLink và câu hỏi ban đầu của bạn là "Làm cách nào để tạo một url chính xác?". Lý do tại sao điều này là cần thiết là WebFormRouteHandler của bạn cung cấp một "hợp lệ" tuyến đường phù hợp, và vì nó được thêm vào trước khi tuyến đường mặc định của bạn trong RouteTable nó được trả về đầu tiên. Nhưng dù sao, tôi đã thêm một câu trả lời khác có thể nhiều hơn theo ý thích của bạn. –