2016-09-08 13 views
0

パラメータを指定したURLルートに問題があります。私はこのリンクに続いた: ASP.NET MVC 5 culture in route and urlURLパラメータは認識され、クエリ文字列を含むurlの場合は値を持ちます

私はコントローラのブログの下にタグアクションを持っています。培養によれば、私は、ルート設定に2つのルートを作成した:

routes.MapRoute(
    name: "TagWithCulture", 
    url: "{culture}/{controller}/{action}/{Name}/{page}/{pageNo}", 
    defaults: new { controller = "Blog", action = "Tag", Name = UrlParameter.Optional, pageNo = UrlParameter.Optional, page = UrlParameter.Optional }, 
    constraints: new { culture = new CultureConstraint(defaultCulture: "ar", pattern: "[a-z]{2}") } 
); 

routes.MapRoute(
    name: "Tag", 
    url: "{controller}/{action}/{Name}/{page}/{pageNo}", 
    defaults: new { controller = "Blog", action = "Tag", Name = UrlParameter.Optional, pageNo = UrlParameter.Optional, page = UrlParameter.Optional } 
) 

コントローラでアクションは2つのパラメータを受け入れるためのコード行の通りである:

public async Task<ActionResult> Tag(string Name, int? pageNo) 

問題がある:私はURLを参照するときこのようなクエリ文字列:

localhost:1025/blog/tag?name=XYZ 

とデバッグは、私が「名前」パラメータは、URLをブラウズし、ルートを適用することで、そうでない場合は、値を持っていることがわかります。

localhost:1025/blog/tag/XYZ 

パラメータ 'name'がnullになります。

これは頭痛を引き起こしています。その解決策はありますか?

+0

2つの 'MapRoute'呼び出しがデフォルトの' MapRoute'の上か下にありますか?これらを打つのではなく、最終的なパラメータとして 'id'を持つデフォルトルートにマップされているのだろうか? –

+0

@ stephen.vakilどちらもデフォルトのMapRoute以下です。私はそれを上に置いて何が起こるのか:それはうまくいくが、 'Tag'アクションはあなたがlocalhostをブラウズするときに意味するホームページになる:1025/localhost /タグをパラメータなしで表示し、ブラウザのURLを変更することなく!!! –

+0

は、常にデフォルトのrouteMapsをrouteMapsの先頭にする必要があるということですか?私は、デフォルトのルートを上に置き、まだTagアクションを実行し、クエリ文字列でのみパラメタを受け入れます。 –

答えて

0

前述のように、特定のルートを最初にデフォルトルートの上に置くことによって処理するようにします。その後、あなたのルートをより具体的にして、blogを参照していないものを不適切に捕まえることはありません。

pagepageNoの両方が必要かどうかわかりません。あなたの行動方法には含まれていないので、私はそうではないと思います。

/に行くこと blog/tagアクションにマップしようとしますので、意図したとおり、あなたの質問にそれをやった方法は動作しませんそれをやって
routes.MapRoute(
    name: "Tag", 
    url: "blog/tag/{Name}/{pageNo}", 
    defaults: new { controller = "Blog", action = "Tag", pageNo = UrlParameter.Optional } 
); 

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

関連する問題