3
A
回答
3
只要您知道框架的運作方式,大多數約定都是可延展的。讓我們來解決兩個最大的約定:
的「{控制器}/{行動} /」 magic關鍵字在控制器首先從路由實例控制器
方式的框架搜索瀏覽目錄,然後在Shared目錄中。
默認情況下,您創建的每條路徑都與一個MvcRouteHandler
對象的實例關聯。當路由匹配時,調用該處理程序來處理傳入的請求。以下是MvcHandler的ProcessRequest外觀:
protected internal virtual void ProcessRequest(HttpContextBase httpContext)
{
this.AddVersionHeader(httpContext);
string requiredString = this.RequestContext.RouteData.GetRequiredString("controller");
IControllerFactory controllerFactory = this.ControllerBuilder.GetControllerFactory();
IController controller = controllerFactory.CreateController(this.RequestContext, requiredString);
if (controller == null)
{
throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, MvcResources.ControllerBuilder_FactoryReturnedNull, new object[] { controllerFactory.GetType(), requiredString }));
}
try
{
controller.Execute(this.RequestContext);
}
finally
{
controllerFactory.ReleaseController(controller);
}
}
注意硬編碼字符串「controller」。那麼,如果你想編寫你自己的控制器查找邏輯,你可以用你想要的任何路線代替這個處理程序。簡單地做something like this (shameless blog plug):現在
routes.Add("ImagesRoute",
new Route("graphics/{filename}", new ImageRouteHandler()));
當路由匹配,它調用自己的邏輯,你可以做任何你請。順便說一下,用於查找帶有「Controller」後綴的XXXXController類的反射是DefaultControllerFactory
對象的一部分,在上面的處理程序中調用,並且此工廠是可替換的。
因此,控制器挑選是一個可覆蓋的約定。從任何控制器方法執行「return View()
」時,如何查找視圖?那麼這裏是爲WebFormViewEngine
構造,框架的默認視圖引擎:
public WebFormViewEngine()
{
base.MasterLocationFormats = new string[] { "~/Views/{1}/{0}.master", "~/Views/Shared/{0}.master" };
base.ViewLocationFormats = new string[] { "~/Views/{1}/{0}.aspx", "~/Views/{1}/{0}.ascx", "~/Views/Shared/{0}.aspx", "~/Views/Shared/{0}.ascx" };
base.PartialViewLocationFormats = base.ViewLocationFormats;
}
所以,如果你不喜歡的看在控制器目錄的約定,然後分享的 - 你可以輕鬆地擴展WebFormViewEngine
(或use an entirely different view engine)和放下它在你的Global.asax:
ViewEngines.Engines.Add(new MyViewEngine());
一個關於MVC框架令人驚奇的事情是不是真的是多麼靈活。你可以用你自己的邏輯來替換它的幾乎任何部分 - 並且所有的代碼都可以看到他們做了什麼。
相關問題
- 1. ASP.NET MVC約定
- 2. ASP.Net MVC大小寫約定
- 3. ASP.NET MVC文件夾約定
- 4. 在ASP.NET MVC 2中有約束的可選路由參數?
- 5. ASP.NET MVC路由的命名約定
- 6. ASP.NET MVC靜態變量有多安全
- 7. asp.net MVC MaxUrlLength可能是IIS約束
- 8. 多對多ASP.NET MVC綁定
- 9. asp.net MVC DisplayTemplates和EditorTemplate命名約定
- 10. Singleton with ASP.NET MVC中的StructureMap自定義約定4
- 11. 你可以更改ASP.NET MVC控制器約定嗎?
- 12. ASP.NET MVC - 關於路由中的約束
- 13. asp.net mvc - 我怎麼可以有多個viewmodels綁定到視圖
- 14. ASP.NET MVC:多模型綁定
- 15. 更改ASP.NET MVC中的控制器名稱約定
- 16. Asp.net MVC - 可變數量的條目
- 17. 雙向綁定可能在ASP.NET MVC中?
- 18. MVC約定配置
- 19. asp.net MVC中有多少類報表可用?
- 20. Java MVC模式中的變量聲明約定/規則?
- 21. 綁定<select>在ASP.Net中有多個選項MVC
- 22. 顯示基於在asp.net可變MVC
- 23. 是否有可能在ASP.NET MVC中重定向HTTPPost?
- 24. 帶有多個可選參數的ASP.NET MVC路由
- 25. ASP.NET MVC:可能有多個顯示模板的類型?
- 26. ASP.NET MVC:控制控制器/視圖的命名約定?
- 27. ASP.NET MVC嵌套對象的字段命名約定
- 28. ASP.NET中的ID命名約定?
- 29. 一個與ASP.net MVC路線多值路徑參數約束
- 30. 沒有ASP.NET的ASP.NET MVC?