2012-01-25 30 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

経路を動的に登録しないでください。

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}" } 
); 

、その後、あなたが持っている可能性があり、あなたのApplication_Startダイナミックルートのパラメータを持っていることのあなたのシナリオを処理することができるはずで、次の静的ルートインデックスこのルートへのリクエストを処理するためのアクション:

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

関連する問題