2014-12-27 47 views
3

對不起,如果這是一個總的noob問題,但我想創建特定於「年份」顯示內容的控制器。我可以擁有一個使用數字的MVC 4控制器嗎?

當我嘗試創建「2015Controller」時,它在數字前面插入下劃線,隨後在視圖名稱中插入下劃線。 (不是友好的網址,我正在尋找。)

也許我是一個完整的塗料,並已錯過了這個船,但我想分離內容爲基於年份的頁面顯示,因爲我有多個我希望通過簡單的網址訪問多年的內容。

+0

您可以將URL的任何部分映射到控制器名稱,操作名稱或參數名稱 - 而不僅限於此特定順序。所以你可以將你的'/ 2014 /'URL段映射到任何東西,而不僅僅是一個控制器名稱(我將映射到一個方法的參數)。你能展示你的網址的例子嗎? – GSerg 2014-12-27 20:29:56

+2

你是否期望你的控制器在一年之間變化很大,或者你是否希望能夠通過像http:// mydomain/2015/Page這樣的URL傳遞一年? – JLRishe 2014-12-27 20:30:23

+0

由於它是一個社區影院網站,內容因年份而異,因此我希望能夠使用mydomain/2015/page過程。 – 2014-12-27 20:34:44

回答

3

這聽起來像是XY Problem

我可以高度肯定地說你應該每年創造一個新的控制器,而不是而不是。這會給你帶來巨大的維護負擔和臃腫的代碼(你每年都必須創建一個新的控制器和一個新的控制器類)。

您應該創建一小組控制器(甚至可能只有一個控制器),添加通過URL傳遞一年的能力,並設計它們以動態加載並提供基於指定年份的內容。

下面介紹如何完成「通過URL傳遞一年」部分。

添加爲在RouteConfig.cs第一路線:

routes.MapRoute(
    name: "Year", 
    url: "{year}/{action}/{id}", 
    defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional}, 
    constraints: new{ year = @"\d{4}" }); 

這告訴一個URL來在任何時間與4位開始的路由模塊,它應該將請求發送到Home控制器(如果需要,可以更改),並將這4位數字作爲路由值,稱爲year

然後,在你HomeController,你可以先走一步,在你的行動增加year作爲參數:

public ActionResult Index(string year) 
{ 
    // use year to fetch and prepare content 
    return View(); 
} 

public ActionResult Schedule(string year) 
{ 
    // use year to fetch and prepare content 
    return View(); 
} 

因此,如果一個訪問者瀏覽到http://mydomain/2015http://mydomain/2015/Index,該請求將被髮送到Index2015的值爲year。如果訪問者導航到http://mydomain/2016/Schedule,那麼該請求將被髮送到Schedule動作,其中year值爲2016

所以,你應該全部設置。如果您想根據年份來區分視圖,則可以添加多個視圖,並將所需的值傳遞給幫助器以顯示所需的視圖。

0

如果每年的內容和邏輯之間沒有關聯,請使用區域。做一個2014區,2015年地區等

地區有據可查的微軟asp.net網站

0

感謝所有幫助。我結束了與「地區」,因爲它對我個人更有意義。每年的內容都是有限的,它使我能夠看到我感到舒適的事物結構。

對我而言,工作必須在製圖過程中取得進展。我沒有完全理解它,當我被迫在開發中受到壓力時,結果有點令人沮喪。

本網站對於我從中獲得的所有信息都非常瞭解,非常感謝!

相關問題