2010-09-21 97 views
1

我需要URL /控制器/動詞/名詞/ ID和我的動作方法將動詞+名詞。例如我想/家/編輯/團隊/ 3打命令的方法mvc.net路由:routevalues在maproutes

public ActionResult editteam(int id){} 

我在我的global.asax文件中有以下路由。

routes.MapRoute(
       "test", 
       "{controller}.mvc/{verb}/{noun}/{id}", 
       new { docid = "", action = "{verb}"+"{noun}", id = "" } 


      ); 

url正確匹配路由,但我不知道我應該在哪裏構造action參數,它是被調用的action方法的名稱。
問候

回答

3

嘗試:

public class VerbNounRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     IRouteHandler handler = new MvcRouteHandler(); 
     var vals = requestContext.RouteData.Values; 
     vals["action"] = (string)vals["verb"] + vals["noun"]; 
     return handler.GetHttpHandler(requestContext); 
    } 
} 

我不知道的方式來自動掛鉤它爲所有路由,但在你的情況下,你可以像入門做到這一點:

routes.MapRoute(
    "test", 
    "{controller}.mvc/{verb}/{noun}/{id}", 
    new { docid = "", id = "" } 
    ).RouteHandler = new VerbNounRouteHandler(); 
-1

嘗試以下,以此作爲你的路線:

routes.MapRoute(
       "HomeVerbNounRoute", 
       "{controller}/{verb}/{noun}/{id}", 
       new { controller = "Home", action = "{verb}"+"{noun}", id = UrlParameter.Optional } 
      ); 

然後你只需把你的ActionResult方法:

public ActionResult editteam(int id){} 

進入控制器/ HomeController.cs和將調用當一個URL匹配提供的路線。

+0

我擔心這是路由參數的默認值,而不是在運行時分配的動詞和名詞的實際值。使用此路線將導致每次匹配此路線時路線值字典的動作字段中的{動詞} {名詞}值。 – 2010-09-21 12:20:32

+0

是否有可能使用映射的自定義控制器,或者像在末尾使用.MVC一樣映射,或者甚至使用硬字符串:/ Custom/{verb}/{noun}/{id}然後如我所說,actionresults在你的家庭控制器?直接傳遞? 如果這不是您要查找的信息,請嘗試澄清問題,因爲我正在努力瞭解您可能想知道的更多信息。 – JTrott 2010-09-21 13:15:10

+0

我需要的是如果我有URL /編輯/團隊/ 1路由值字典應包含editteam在操作鍵。如果我有像管理/團隊/ 1路由值字典url應該有管理員在行動的關鍵。 routes.Maproutes只能定義默認值而不是參數的動態值(在我的例子中是動詞和名詞)。我認爲由eglasius提供的解決方案應該可行。 – 2010-09-22 04:29:38