0

私は2つのパラメータを持つactionresultを持っています:

 public ActionResult Index(int a,string b)
        {
            //some code

            return View(b);
        }

この URL が自動的に作成されます。

  mysite.com/a=1&b=http://site.com/b=1

URLに最初のパラメータ「a」を表示するだけです:

  mysite.com/a=1

global.ascx で作成される MVC の既定のルートを使用します。

 routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

私は何をすべきか?ありがとう...

4

1 に答える 1

0

「b」パラメータが現在のリクエストから漏れている場合は、「b」パラメータを明示的に空の文字列に設定して、この動作を回避できます。

@Html.ActionLink("Home", "Index", "Home", new { a = 1, b = "" }, null)

この「機能」をバグとして報告しましたが、Microsoft の開発者は、この動作により URL の構成が容易になると考えているようで、修正するつもりはありません。

ここに表示されているのは、他のページへのルートの生成を簡素化する (場合によっては...) ために「アンビエント」値 (受信リクエストの URL で検出された値) を使用するルーティング機能です。

私の回答 (「Eilon」という名前で) は、この StackOverflow の投稿で確認できます。この投稿では、動作をもう少し詳しく説明しています: How Can I Stop ASP.Net MVC Html.ActionLink From Using Existing Route Values?

最終的に、URL に対して生成されるものを最大限に制御したい場合は、考慮すべきオプションがいくつかあります。

  1. 名前付きルートを使用して、必要なルートのみが URL の生成に使用されるようにします (これは多くの場合、良い方法ですが、この特定のシナリオでは役に立ちません)。
  2. すべてのルート パラメータを明示的に指定します。空にしたい値も含めます。これは、この特定の問題を解決する 1 つの方法です。
  3. ルーティングを使用して URL を生成する代わりに、Razor の ~/ 構文を使用するか、Url.Content("~/someurl") を呼び出して、生成しようとしている URL に余分な (または予期しない) 処理が発生しないようにすることができます。

ありがとう、エイロン

于 2014-11-25T00:45:25.730 に答える