2012-01-25 18 views
0

我想在將新對象提交給db後映射新路由。因此,例如,如果我輸入名稱爲「Test」的對象,我希望立即有一條新路線,以解決「Test.aspx」。如何在控制器中添加路由

我試圖

System.Web.Routing.RouteTable.Routes.MapRoute(obj.NameUrl, obj.NameUrl + extension, new { controller = "per", action = "Index", name = obj.NameUrl }); 

的控制器,但它不工作(沒有錯誤,在生命週期只是可能不是正確的時間?)。相同的代碼在Application_Start()

回答

3

您應該避免動態註冊路由。在Application_Start下面的靜態路由應該可以處理你的一種具有動態路由參數的場景:

routes.MapRoute(
    "page", 
    "{name}.aspx", 
    new { controller = "per", action = "index" }, 
    new { name = @"[a-z0-9]+" } 
); 

,如果擴展名必須是動態的,以及:

routes.MapRoute(
    "page", 
    "{name}.{extension}", 
    new { controller = "per", action = "index" }, 
    new { name = @"[a-z0-9]+", extension = @"[a-z]{3,4}" } 
); 

,然後你可以有Index操作來處理請求,這條路線:

public class PerController: Controller 
{ 
    public ActionResult Index(string name, string extension) 
    { 
     ...  
    } 
} 

,如果你想生成一個鏈接,這個動作:

@Html.RouteLink("go to foo", "page", new { name = "foo", extension = "aspx" }) 
+0

爲什麼我應該避免動態註冊路由,難道不能完成? – Spikolynn

+0

@Spikolynn,你應該避免它,因爲這不是打算如何使用路由系統。 –

+0

如果沒有意圖,它不應該是可能的,但我會接受你的答案,並解決這個特定的解決方案通配符匹配造成的問題。謝謝! – Spikolynn

相關問題