2010-12-13 27 views
0

私はASP.NET MVC 3 RC 2のルーティング問題

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

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

からASP.NET MVCのデフォルトのルーティングを変更したが、今、すべてのHtml.ActionLink @()の呼び出しがレンダリングされています〜href = ""ルートをデフォルトに戻すと、すべてのリンクが再び機能します。

私はRC1と同じルートを使用し、それは完全に機能しました。

リリースのドキュメントで何も見つかりませんでしたので、間違っていると思います。ルートで

よろしく、

ステファン

答えて

2

は、オプションのパラメータは、最後に表示することができます。これは、あなたのルート定義でidパラメータがオプションではないことを意味します。明示的に値に設定する必要があります。

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

そして、あなたがリンクを生成するときに、このルートを一致させたい場合は、必ずidパラメータの値を提供する必要があります:あなたはIDにデフォルト値を与えるかもしれない別の方法として

@Html.ActionLink("some link", "index", new { id = "123" }) 

パラメータ:

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}/{lineNo}", 
    new { 
     controller = "Home", 
     action = "Index", 
     id = "123", 
     lineNo = UrlParameter.Optional 
    } 
); 

これでリンクに指定する必要はなくなりました。

+0

これはRC2の新機能ですか? – forki23

+2

私は分かりません。おそらくそれは以前のバージョンでは機能していたかもしれませんが、IDがオプションの場合、ルーティングエンジンはidパラメータとlineNoパラメータのあいだを曖昧にすることができないため、意味をなさないルート定義です。おそらく、このルールはRC2で実施されています。これはIMHOにとっては良いことです。 –

+0

ありがとうございます。私は2つの部分でルールを分割し、今は正常に動作します。 – forki23