有兩件事我不能在this article中掌握。它解釋了使用ASP.NET MVC的方式,而不需要爲每個視圖分別控制器或操作。無需爲每個視圖解決方案單獨控制器或操作 - 瞭解代碼
1)DispatchRequest
方法:
private void DispatchRequest(IControllerFactory controllerFactory, string controller, string action)
{
var route = GetRoute(controller, action);
_requestContext.RouteData.Values["x-action"] = action;
_requestContext.RouteData.Values["x-controller"] = controller;
if (route != null)
{
_requestContext.RouteData.Values["controller"] = route.Controller;
_requestContext.RouteData.Values["action"] = route.Action;
if (route.Area != string.Empty)
{
_requestContext.RouteData.DataTokens["area"] = route.Area;
}
controller = route.Controller;
的動作和控制器字符串 「X-動作」 和 「x-控制器」 鍵下儲存。控制器和動作下面幾行存儲在「控制器」和「動作」鍵下。
對(控制器和動作)都是字符串,不是這些對相同嗎?它看起來像我一樣。爲什麼不必要地複製數據?
2)在所述控制器,ControllerLessController
:
public virtual ActionResult Index()
{
var action = RouteData.Values["x-action"].ToString();
var controller = RouteData.Values["x-controller"].ToString();
RouteData.Values["action"] = action;
RouteData.Values["controller"] = controller;
if (RouteData.Values["area"] != null)
{
RouteData.DataTokens["area"] = RouteData.Values["area"].ToString();
}
return View(action);
}
}
通知的前兩行中的身體。爲什麼在字符串對象上調用toString
?此外,爲什麼有人決定將它們存儲在動作和控制器變量中,並在「動作」和「控制器」鍵(第3,4行)下覆蓋數據?
如果我不想知道它,那麼我不會問。有時候你可以通過了解細節來了解更多,你知道的。 – user107986
這篇文章中使用的方法並不是一個很好的解決方案。它將控制器內部的路由帶入它不屬於的地方。一個更好的方法是繼承Route類,重寫GetRouteData,並且無論如何都可以返回相同的controller和action。(如果需要,可以選擇存儲原始值)。然後使用自定義的'Route'類來註冊所有的路由。 – NightOwl888