2011-09-27 65 views
4

我正在寫一個管理幾個子站點的區域,幾乎所有的功能將在每個站點上相同(添加/編輯/刪除頁面等),我的存儲庫實例化SiteIdentity因此所有的數據訪問方法都是不可知的。我現在的問題是試圖讓我的行動方法也是不可知的。發送一個參數給控制器在ASP MVC 2

我想使用的URL模式是沿着線:

"ExternalSite/{identity}/{controller}/{action}/{id}"

天真的方法是讓每個動作,像是身份參數,但這意味着必須通過這個到我的倉庫在每個動作上以及將它包含在ViewData中的幾個UI元素。我寧願在控制器中發生這種事情,比如在其構造函數中。

這樣做的最好方法是什麼?目前我能想到的最好的方法是嘗試從RouteData字典中查找並投射標識,但我的一部分感覺應該有更優雅的解決方案。

回答

1

聽起來好像你想每次使用特定的參數名稱(也稱爲RouteData字典鍵)時使用OnActionExecuting或自定義ModelBinder來執行該邏輯。

  1. Creating a custom modelbinder in ASP.NET MVC
  2. Creating an OnActionExecuting method in ASP.NET MVCDoing Serverside tracking in ASP.NET MVC
+0

OnActionExecuting似乎是最好的辦法了方向。 – Chao

+0

爲了進一步擴展,我最終在控制器上創建了一個方法來設置Identity相關的屬性,爲此方法創建了一個接口,並讓actionfilter調用了方法。這使我能夠針對不同的控制器有不同的邏輯。 – Chao

1

您可以訪問Request.RequestContext.RouteData中的路由值,因此您可以創建基本控制器和公共屬性SiteIdentity,在這種情況下,您可以從所有繼承的控制器中的所有操作訪問它。

+0

這是我的想法 – Chao

相關問題