2012-01-04 15 views
5

IはHtml.ActionLink()を作成したURLが所望の形式ではありません使用する場合:MVCルーティングHtml.ActionLinkを用いてURLを作成し、ID = 1の代わりに/ ID

Html.ActionLink(Model.ProductCode, "Update", new { id = Model.ProductId }) 

このURLを作り

/Update?id=1 

私はこのURLを持ちたい:

第二URLを作成するどのようなルーティングオプション
/Update/1 

?これが私たちが推奨するURLスタイルです。

両方のURLが動作し、正しいページが表示されます - 私たちが望むただしのみ使用/ IDに

MVCのデフォルトルートは、両方のURLを扱うのGlobal.asaxで

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" }); // Parameter defaults 
+0

これに合致するルートはありますか? – SLaks

+0

global.asaxにルートを投稿できますか? – epignosisx

+0

両方のルートが現在有効です。私は、ActionLinkが望ましいフォーマットでURLを生成するようにしたいだけです。 –

答えて

3

私がして、問題を再現することができます一般的なパターンとまだ一致する私のデフォルトルートに関するルートを持っています。例:

routes.MapRoute(
          "Default2", // Route name 
          "{controller}/{action}", // URL with parameters 
          new { controller = "Home", action = "Index"} // Parameter defaults 
         ); 

デフォルトルートよりも上の場所には、私のURLに?id = 1が表示されます。このActionLinkが、あなたが期待している経路上のどのルートにも一致していないことを確認できますか?

EDIT:以下しかしURL

に影響を与えない、それはまだ他のシナリオでUrlParameter.Optionalを使用することが有利であり得ます。暴徒のルールがそうでない限り、繁栄のために出発する。

新しいUrlParameter.Optional値。 URLパラメータのデフォルト値をこの特別な値に設定すると、MVCはそのキー をルート値辞書から削除して、存在しないようにします。

あなたのルートを少し調整する必要があると思います。変更ID =「」IDに= UrlParameter.Optional

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

これは、我々はデフォルトルートとあなたが探している行動のために使用するものですが、私たちのアプリケーションの動作方法です。

+0

URLはまだ?id = 1で終わっています –

+0

JK - MVCアプリケーションで作成できるかどうか確認しながら自分自身を確認しましたか? URLを使用してMVCが一致するデフォルトルートの上に他のルートがありますか?あなたのルートテーブル全体を見ることは可能でしょうか? – Tommy

0

This question/answerを参照してください。

使用しているMVCのバージョンはどれですか? MVC3にいる場合は、Html.ActionLink()への呼び出しに4番目のパラメータを追加し、nullを渡す必要があります。

0

私はちょうどこれに遭遇し、答えに決めました。 Url.Action()とHtml.ActionLink()の両方が、ルートコレクション内の最初のルートを使用して結果のURLをフォーマットすることが判明しました。だから、RegisterRoutesにおける最初のマッピングされた経路は、()であるshoild:代わりに "{コントローラ}/{アクション}/{ID}" の

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{id}/{action}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

。経路名(すなわち、"デフォルト")は関係ありません。注文だけが関係します。

0
routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
関連する問題