簡體   English   中英

ASP.NET MVC如何動態創建控制器和視圖?

[英]How Does ASP.NET MVC Dynamically Create Controllers and Views?

這是一個好奇點而不是我遇到的實際問題:ASP.NET MVC框架如何創建適當的控制器並從RouteCollection中的字符串名稱查看對象? 我已經嘗試搜索實際的ASP.NET MVC2代碼來解決這個問題,但在控制器工廠類中迷失了。

當我注冊路由時,我將第一個塊映射到控制器,第二個塊映射到一個動作,第三個塊映射到一個ID,但程序如何獲取字符串名稱並創建新對象?

/Users/Update/15354 = New UserController, executes Update() - how?

我能想象的唯一工作就是反映項目中的所有類並創建一個與所請求的名稱匹配的類,但是如何在不知道要使用哪個名稱空間的情況下解決類名中的沖突?

標准命名約定“FooController”規定所有控制器都應具有后綴“Controller”; 因此,當您的當前路由指示控制器“Foo”時,ASP.NET MVC會檢查應用程序中繼承自Controller的類型,並查找名稱與“Foo”+“Controller”匹配的類型。

您可以正確地假設ASP.NET MVC使用反射來查找所需的控制器,但它的影響相對較小,因為應用程序在初始啟動期間會緩存反射數據。

如果您有兩個具有相同名稱和不同名稱空間的控制器,則可以使用MapRoute()的替代形式來指示您要解析的控制器。

routes.MapRoute(
    "Error_ServiceUnavailable",
    "error/service-unavailable",
    new { controller = "Error", action = "ServiceUnavailable" },
    new[] { "Controllers" }
);

routes.MapRoute(
    "Admin_Error_ServiceUnavailable",
    "admin/error/service-unavailable",
    new { controller = "Error", action = "ServiceUnavailable" },
    new[] { "Areas.Admin.Controllers" }
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM