1

インデックスページで、次のURLを使用してURLを生成しています

@foreach(var c in ViewBag.cities)
{
   <li>@Html.ActionLink((string)c.CityName,"somepage",new{city=c.CityName, id=c.Id})</li>
}

次の形式ですべての都市のURLを生成しました

localhost:55055/1/city1
localhost:55055/2/city2
...

ここで、1,2はIdで、city1、city2はCityNameです。

ルートを次のように構成しました

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

ホームコントローラーのsomepageアクションメソッド:

public string somepage(int id, string city)
{
  return city + " " + id;
}

私もこれを試しました

public string somepage()
{
   return "Hello";
}

しかし、それは結果としてResource cannot be found

ヒットしないブレークポイントを入れてみましsompageた。

任意の提案

アップデート

以下のコメントで@KDが指摘しているように、私はルートの順序を変更し、上記のルールをすべてのルールの上に配置しました。方法も変更しました

 public ActionResult somepage(int id=0, string city="")
 {
    return Content(city + " " + id);
 }

これで動作が変更され、デフォルトのルールが変更されました

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

通常のインデックスページには使用されません。somepage代わりに、メソッドのブレークポイントがヒットhttp://localhost:55055/2/citynameし、ブラウザに入れると、ページにidとcitynameが表示されるため、この使用法が使用されます。しかし現在、デフォルトルートはアプリケーションホームに使用されていませんhttp://localhost:55055/

4

2 に答える 2

4

新しいルートのパターンとデフォルトルートのパターンはほぼ同じであるため、これらのルートに一致するように常に競合が発生します。ルートを次のように変更します。

routes.MapRoute(
            name: "CityRoute",
            url: "CitySearch/{id}/{city}",
            defaults: new { controller = "Home", action = "somepage", id = UrlParameter.Optional, city = UrlParameter.Optional }
            );

つまり、パターンにプレフィックスを追加して、簡単に識別できるようにします。「CitySearch」のように、アクションリンクを提供しながらルート名を指定します。

または、プレフィックスを追加したくない場合は、次のことを実行すると、チャームのように機能します。

CityRouteに、IDフィールドが整数であるかどうかをチェックするIdのルート制約を追加します。通常のURLの場合、falseが返されるため、デフォルトルートが評価されます...これを試してください...

routes.MapRoute(
            name: "CityRoute",
            url: "{id}/{city}",
            defaults: new { controller = "Home", action = "somepage", id = UrlParameter.Optional, city = UrlParameter.Optional },
            constraints: new {id = @"\d+"}
            );

これは正規表現の制約です。このルートを一番上に置いて確認してください。

于 2013-03-12T09:18:22.117 に答える
0

アクションを定義していないため、アクションは呼び出されず、エラーが発生します

これを試して、

public ActionResult somepage(int id, string city)
    {
        return Content(city + " " + id);
    }
于 2013-03-12T08:46:01.783 に答える