2012-09-06 20 views
0

我有以下路由,其中​​任何以A,F或L開頭的URL都將 指向Index操作。它看起來像使用了一個C尖銳的正則表達式。如何將路由操作作爲參數傳遞給使用MVC4的索引方法

 context.MapRoute(
      "content", 
      "{page}/{title}", 
      new { controller = "Server", action = "Index" }, 
      new { page = @"^[AFL][0-9A-Z]{3}$" } 
     ); 

我願做同樣的事情,但這次直接說有菜單,目標,頁面或主題的行動去索引操作,並通過將「菜單」,「目標」的任何URL,作爲參數的「索引」操作的「頁面」或「主題」:

有人可以告訴我如何做到這一點。它看起來像一個C#類型的正則表達式bubut我不知道如何執行第二個 路由所需的表達式。

+0

*它看起來像一個C鋒利的正則表達式*。這告訴我你在查詢之前沒有看過文檔... – devundef

回答

1

所有你需要的是一個簡單的路由約束:

context.MapRoute(
     "content", 
     "{page}/{title}", 
     new { controller = "Server", action = "Index" }, 
     new { page = @"Menus|Objectives|Pages|Topics" } 
    ); 

然後動作方法的簽名看起來像這樣:

public ActionResult Index(string page) 
{ 
    ... 
    return View(); 
} 
0

在這裏看看這個例子...

http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-route-constraint-cs 你必須定義一個帶參數的路線。

routes.MapRoute(
    "Content", 
    "Content/{TypeOfAction}", 
    new {controller="Content", action="Index"}, 
    new {@"\b(Menus|Objectives|Pages|Topics)\b"} 

); 

Asuming你有一個索引操作它處理TypeOfAction作爲參數

編輯答案一ContentController:在正則表達式 \b查找單詞邊界......還沒有測試,但應該工作... http://www.regular-expressions.info/wordboundaries.html http://www.regular-expressions.info/alternation.html

+0

但是你給的路由將允許TypeOfAction中的任何東西。我需要的只是那些在問題中的人。 –

+0

編輯答案...語法超出我的頭,因此您可能需要稍微調整它.../b通過Regex找到單詞邊界 – silverfighter

相關問題