Tôi đã tạo một ứng dụng ASP.NET MVC 3 trống rỗng khác với 2 bộ điều khiển, HomeController
và OtherController
.Tại sao bạn cần định tuyến cho Html.Action?
HomeController.cs trông như thế này:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
Index.cshtml trông như thế này:
@Html.Action("Index", "Other")
Và, tất nhiên, Othercontroller.cs:
public class OtherController : Controller
{
[ChildActionOnly]
public ActionResult Index()
{
return Content("OK!");
}
}
Cho đến nay , thật tuyệt. Tôi chạy các ứng dụng, và nó nói với tôi tất cả mọi thứ là OK!
Bây giờ, tôi lấy mặc định RegisterRoutes
từ Global.asax.cs:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
Và tôi vò nhàu tờ nó lên, do đó không có tuyến đường phù hợp OtherController
:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Default", "", new { controller = "Home", action = "Index" });
}
Bây giờ, khi tôi chạy trang, nó bị treo với thông báo lỗi này:
System.InvalidOperationException: No route in the route table matches the supplied values.
Source Error:
Line 1: @Html.Action("Index", "Other")
Tôi đã chỉ định tên bộ điều khiển và tên hành động trong cuộc gọi đến .Action
. Không có URL nào được tạo và không có yêu cầu nào được thực hiện. Tại sao định tuyến lại cần tham gia?
Thank bạn. Nó có thể giúp đưa ra một ví dụ cụ thể về tình trạng quá tải có thể ảnh hưởng đến lộ trình sử dụng. Bạn có thể nghĩ ra một điều đơn giản không? –
Trong những giờ muộn ở nhà (yum, rượu vang), người đầu tiên nghĩ đến sẽ sử dụng một khu vực trong từ điển giá trị tuyến đường của bạn. Nếu không có trình xử lý định tuyến, MVC sẽ biết không gian tên nào để tìm bộ điều khiển hoặc nếu nó là một tham số cho một hành động. -> @ Html.Action ("Hành động", "Bộ điều khiển", mới {khu vực = "Quản trị viên"}). Ngoài ra, các tuyến đường được đặt tên có thể là một ví dụ khác, nơi bạn chỉ cần chuyển tên của tuyến đường và không nhất thiết cần phải vượt qua bộ điều khiển, các tham số hành động vì chúng có thể được xác định trong định nghĩa tuyến đường được đặt tên. – Tommy