2017-03-17 10 views
1

この種類の質問はSO(、post 2post 3)で先に質問されていますが、ASP.NET MVC 5属性ルーティング:複数のパラメータを使用するとUrl.Actionがnullを返します

私は、以下の経路(LandingControllerクラス内で定義された)を持っている:

@Url.Action("Connections", "Landing", new { city = "madrid", page = 1 }) 

または

:私はこのような私のカミソリテンプレートでURLを生成しようとしていたため

[HttpGet] 
[Route("connections/{city:name}/map{page?}", Order = 2)] 
public Task<ActionResult> Connections(string city, int page = 1) 

@Url.Action("Connections", new { city = "madrid", page = 1 }) 

これらの呼び出しは両方とも、nullを返します。誰でも理由が分かりますか?

ただし、ルートテンプレートのページパラメータを省略した場合([Route("connections/{city:name}/map", Order = 2)])、次のURLが生成されます。/connections/madrid/map/?page=1これは私が望むものではありませんが、上記の呼び出しで何か問題があることを示しています。

+0

、あなたはまた、ルートが定義されている方法を表示することができますあなたのrouteconfigで? –

+0

私のルートは、属性ルーティング、つまり(私が質問に投稿した)アクションメソッドより上で定義されているため、routeconfigにはありません。 –

+0

'[Route(" connections/{city:name}/map/{page?} "'? – juunas

答えて

0
[HttpGet] 
[Route("connections/{city:name}/map{page?}", Order = 2)] 
public Task<ActionResult> Connections(string city, int page = 1) 

あなたのルーティングが正しくないことを確かめてください。{city:name}名前は何ですか?私は拘束型の名前を持っているものは思い出せません。

あなたの属性のルーティングは、このような単純なする必要があります:

[Route("connections/{city}/map/{page?}", Order = 2)] 

あなたは整数としてページに制約を追加したい場合は、次のようになります。

[Route("connections/{city}/map/{page:int?}", Order = 2)] 
+0

あなたの答えをありがとう、しかし、私は 'name'制約を削除しても、私はまだ' null'を取得、私はすでにそれを試みた... –

+0

しかし、私はあなたのコントローラそれ競合を引き起こす可能性がありますか? – 12seconds

+0

いいえ、確認しました。生成されると期待されているURL( 'connections/{city:name}/map1')をコールしてデバッガを実行すると、アクション実装内に設定されたブレークポイントがヒットします。 –

関連する問題