2009-05-03 14 views
1

すべては、私の状況は、私は基本的なルートを持っていることである、プラスいくつかの他の単純な路線:urlパラメータをasp.net mvcのルートリンクに追加するにはどうすればよいですか?

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

だから、次のURLが機能:http://somesite.com/tags/index/1

しかし、私のインデックスページの一部は、URLパラメータを取ります以下の方法で:

http://somesite.com/tags/index/1?when=lastmonth

このリンクにHtml.RouteLinkを使用するにはどうすればよいですか?

お客様できません。 '?'このようなグローバルasaxファイル内のルートへ:

Html.RouteLink(string.Format("{0} ", link.Rating), "LinksWhen", 
       new {id=link.ReferenceId, when=Model.When}) 

が、それはしませんが:

routes.MapRoute("TagsWhen", "Tags/index/{id}?when={when}", 
     new {controller = "Tags", action = "Index", id = "", when = ""}); 

このルートは、私が使用してそれにリンクでき働いていた場合は!だから私は、あなたドン」私はこれをテストすることができ、コンピュータを持っていない私はhttp://somesite.com/tags/index/1?when=lastmonth

答えて

1

解決策を見つけました。通常のHtml.RouteLinkと、urlパラメータとして追加するglobal.asaxのURLにマップされていないオブジェクトプロパティを実行するだけで済みます。

だから、このルートを使用して:

routes.MapRoute(
     "Links",            
     "Links/details/{id}",       
     new { controller = "Links", action = "Details", id = ""} defaults 
    ); 

このroutelink:

Html.RouteLink("Link Text", "Links", 
     new {id=link.ReferenceId, when=Model.When }) 

は、正しいURLを生成します。

http://localhost:2535/Links/details/1?when=onemonth

+0

これをActionLinkから引き離すことはできます。私はマシューの解決策がうまくいかなかった理由を知らないのですか?私はActionLinkを使って彼と同じことをしています。私はURLを持っています:.../delete/124?otherId = 5 – GONeale

+0

さらにRouteLinkを使用する場合、別の依存関係を追加する場合は、「リンク」ルート名が常に存在し、その名前をrefに結びつける必要があります。あなたのビューで(名前を変更した場合は例外も発生します)。しかし、あなたは標準的なルートを持っているので、 'ActionLink'はうまくいくでしょうし、別のルートという名前のコードは必要ありません。 – GONeale

+0

私は不思議です。なぜあなたはかなり醜いURLを作成したいのですか? –

-1

を生成するHtml.RouteLinkを使用するかどうかはわかりませんが、私の頭の上から

<%= Html.ActionLink("Link text", "Index", "Home", new { id = 1, when = "lastmonth" } %> 

global.asax.csファイルのルートにオプションのパラメータを指定する必要があります。一致しないものは、デフォルトでクエリ文字列にチャッキングされます。

+0

しかし、それは不適切なURLを生成しませんか? –

+0

ちょうどこれを試して、それは生成します: http://somesite.com/tags/index?when=lastmonth そして、IDを追加しません... –

+0

質問は、 'ActionLink'ではなく、' RouteLink'と特に言います。 –

0

マシューのアプローチおそらく彼ため動作しませんでしたthに別のnullパラメータが必要でしたe end、それ以外の場合はルート値をhtml属性として渡します。 :)

<%= Html.ActionLink("Link text", "Index", "Home", new { id = 1, when = "lastmonth" }, null) %> 

最後にMapRoute()あなたはそれに対してうまくいくはずです。

関連する問題