2017-04-27 14 views
0
内の複数のフィルタパラメータの間に生成ダッシュ

私はMVCに新たなんだ、次のように定義されたマイルート:MVCルーティング:のURL

:私のウェブサイトで時にユーザ検索

routes.MapRoute(
      name: "NewRoute", 
      url: "P/{colorname}-{id}/{statename}-{materialtype}-{HasPrice}", 
     defaults: new 
      { 
       controller = "Products", 
       action = "P", 
       id = UrlParameter.Optional, 
       statename = UrlParameter.Optional, 
       colorname = UrlParameter.Optional, 
       materialtype = UrlParameter.Optional, 
       HasPrice = UrlParameter.Optional 

      } 
     ); 

が、私は、URLの下に表示したいです

P /قیمت-نوعمواد-ناماستان/شماره-رنگ

が、404エラーを取得し、このURLを表示:/ P/-/-

私を助けてください... 感謝s ...

答えて

0

まず、この場合はオプションのルート値を持つことは意味がありません。オプションのパラメータは、最も右のパラメータの後ろに別のオプションのパラメータまたは/を置くだけで動作します。 URLにダッシュが付いているため、これは不可能です。だから、あなたのルートで、オプションの宣言を削除します。

routes.MapRoute(
     name: "NewRoute", 
     url: "P/{colorname}-{id}/{statename}-{materialtype}-{HasPrice}", 
     defaults: new 
     { 
      controller = "Products", 
      action = "P" 
     } 
    ); 

ます。また、確認する必要があり、あなたのroute can be matched(つまり、それが到達不能であることになります前に登録されていないルート)。普通の英語では、を意味します。の前にのデフォルトルートの前に定義する必要があります。

パラメータがオプションではないため、欠落しているものがあれば、その経路は常にスキップされます。これは、後で登録する追加の経路があなたの構成にある可能性があるためです1。

ここで、必要なURLを生成するには、URLの生成時に欠落しているルートデータを提供する必要があります。たとえば、これはあなたが上記のルートを使用して問題のURLへのハイパーリンクを生成する方法を示します。

@Html.ActionLink("My Link", "P", "Products", 
    new { colorname = "رنگ", id = "شماره", statename = "نام استان", 
     materialtype = "نوع مواد", HasPrice = "قیمت" }, null) 

これはもちろん、あなたはすでにそれでPという名前の作用を有するProductsControllerという名前のコントローラを作ったと仮定しています。

+0

私はこのActionLinkを使用すると、それはmyDefaultルートに行きます...私のデフォルトルートはNewRouteの後に定義されます。助けてください... –

+0

あなたの言葉にもスペースがあるようですそれらの間では、URLで許可されていません。 URLに許可されている文字と許可されていない文字の内訳については、[(Please)Unsafe Characters in URLの使用を中止する](https://perishablepress.com/stop-using-unsafe-characters-in-urls/)を参照してください。スペースのプレースホルダ文字やトークンを使用して、値プロバイダやフィルタなど、コントローラに到達する前にトークンの置換を行うようにすることをお勧めします。 – NightOwl888

関連する問題