4

これが私のルート設定です:

routes.MapRoute(
    name: "MyRoute",
    url: "Secret/{source}/{display}/{sort}/{tags}/{filter}/{pageSize}/{page}",
    defaults: new { controller = "Secret", action = "Index", page = 1, filter = "-", tags = "-" },
    namespaces: new[] { "SomeProject.Controllers" }
    );

この URL にアクセスすると:

http://localhost:12345/Secret/SourceHere/Gallery/Score/-/-/26

私のビューにはこのマークアップがあります:

<a href="@Url.Action("Index", new { tags = @tagInfo.Tag })">

その結果、リンク内の URL は次のようになります。

http://localhost:12345/Secret?tags=hello

公式ドキュメントは見つかりませんが、SO、Google などで読んだものはすべて、ルート値を保持する必要があると書かれています。ええと、毎回すべてのルート値を指定することで回避しましたが、それは最悪です。

ルート値が保持されないのはなぜですか?

以下の私の答えを編集してください。別の見方/状況では、そこにあるルールは適用されません。ルート値が記憶されているかどうかのルールを絶対に確実に説明できる人はいますか?

ルートは私を夢中にさせます。

4

1 に答える 1

3

結果として (Robert Harvey に感謝)、すべてのルート パラメーターが (すべての) デフォルト値を持っていることを確認すると、現在のルート値を記憶しているリンクがビューによって生成されることがわかりました。

これは非常に紛らわしいことを指摘したいと思います: デフォルト値は何にも使用されませんが、値が記憶されるように指定する必要があります!

唯一のことは、値が指定されている最初のパラメーターまでしか覚えていないということです。それ以降のパラメーターはすべて失われます (デフォルト値以外のパラメーターも含まれます)。

したがって、現時点での答えは次のとおりです。すべてのルート パラメータにいくつかの (任意の!) デフォルト値を指定し、必要なパラメータに新しい値を指定することを忘れないでください。

于 2012-11-30T23:28:00.450 に答える