Oto moja struktura folderów .Net MVC:
Mam osobny folder o nazwie „Obszar”, aw środku mam folder o nazwie „Restauracja”. Wewnątrz tego folderu „Restauracja” mam kontroler o nazwie „MenuController”, który ma akcję o nazwie „Indeks”
Próbuję przepisać adres URL (Custom Route Mapping) wewnątrz „Global.asax.cs” przy użyciu następującego kodu.
routes.MapRoute(
"RestaurantMenu", // Route name
"Restaurant/{id}", // URL with parameters
new { controller = "/Restaurant/Menu", action = "Index", id = UrlParameter.Optional }
// Parameter defaults
);
Ale dał mi błąd HTTP 404.
Odpowiedzi:
2 dla odpowiedzi № 1Parametrem kontrolera na trasie powinna być nazwa kontrolera, a nie ścieżka:
Jeśli nazwa twojego kontrolera to Menu
następnie zmień to w ten sposób:
routes.MapRoute(
"RestaurantMenu", // Route name
"Restaurant/{id}", // URL with parameters
new { controller = "Menu", action = "Index", id = UrlParameter.Optional }
// Parameter defaults
);
I jeszcze jedna dziwna rzecz: czy ta trasa znajduje się w twoim pliku Global.asax? Powinien znajdować się w pliku RestaurantAreaRegistration.cs w następujący sposób;
public class RestaurantAreaRegistration : AreaRegistration {
public override string AreaName {
get {
return "Restaurant";
}
}
public override void RegisterArea(AreaRegistrationContext context) {
context.MapRoute(
"RestaurantMenu", // Route name
"Restaurant/{id}", // URL with parameters
new { controller = "Menu", action = "Index", id = UrlParameter.Optional }
// Parameter defaults
);
context.MapRoute(
"Accommodation_default",
"accomm/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
wtedy możesz spróbować. Jeśli chcesz użyć ActionLink z tą trasą, użyj go w następujący sposób:
@Html.ActionLink("MyLink", "Index", "Menu", new { id = 1, Area = "Restaurant"})
Powyższy kod napisałem w notatniku, więc mogą pojawić się literówki :)