ASP.Net MVC:だから待って…デフォルトルートパラメータにはidという名前を付ける必要がありますか?

StackOverflow https://stackoverflow.com/questions/1004331

  •  05-07-2019
  •  | 
  •  

質問

この問題を抱えている人はいますか?私は何か間違ったことをしなければなりません。

だから私はこのようなエラーのルートを設定しています:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { error = "" }
);

そして次のように呼び出す:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { error = errorMessage.ToString() }));

そしてコントローラー上で:

public ActionResult Error(String error)

簡単ですか?これが実際に実行されると、URLが次のように見えてもエラーはnullです。

/ Shared / Error / ThisIsTheError

ただし、Errorメソッドのエラーパラメーターはnullです。 (そして、はい、私は他の言葉を試しました)

今、すべてを「id」という単語に置き換えれば、すべてが機能します。

Global.asax.cs

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{id}",
 new { id = "" }
);

リダイレクト:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { id = errorMessage.ToString() }));

共有コントローラー:

public ActionResult Error(String id)

値を取得するデフォルトルートがある場合、id aにはすべてのルートの単語が必要ですか?

役に立ちましたか?

解決

コントローラーとアクションのパラメーターを常に指定する必要があります:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { controller = "Shared", action="Error", error = "" }
);

idを使用する理由は、デフォルトルートがまだ登録されており、パラメーターとしてidを持ち、コントローラーとアクションのデフォルト値を持っているためだと推測しています。

デフォルトのルートがまだある場合は、ルートを前に追加することを確認してください。追加しないと、最初に他のルートと一致します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top