web-dev-qa-db-ja.com

RedirectToActionおよびRedirectToRoute

Webページ1のコントローラーで、2つの変数を渡してWebページ2にリダイレクトします。

RedirectToRouteを使用しようとしましたが、動作させることができません。間違ったURLが表示されます。次に、RedirectToActionの使用に切り替えました。

私のコード:

ルーティング

routes.MapRoute(
    "CreateAdditionalPreviousNames", // Route name
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters
    new { controller = "UsersAdditionalPreviousNames", action = "Index", userId = UrlParameter.Optional, applicantId = UrlParameter.Optional } // Parameter defaults
);

RedirectToAction(動作します)

return RedirectToAction("Index", "UsersAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id });

RedirectToRoute(機能しません)

return RedirectToRoute("CreateAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id });

ああ、もう1つ、オプションではなく必須のパラメーターを作成できますか?

21
user1079925

パラメーターのデフォルトを省略して、パラメーターを必須にします。

    routes.MapRoute(
    "CreateAdditionalPreviousNames", // Route name
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters
    new { controller = "UsersAdditionalPreviousNames", action = "Index" }
);

ルートのリダイレクトについては、これを試してください:

return RedirectToRoute(new 
{ 
    controller = "UsersAdditionalPreviousNames", 
    action = "Index", 
    userId = user.Id, 
    applicantId = applicant.Id 
});

スティーブサンダーソンから選んだもう1つの習慣は、ルートに名前を付けないことです。各ルートにはヌル名を付けることができます。これにより、すべてのパラメーターを明示的に指定できます。

    routes.MapRoute(
    null, // Route name
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters
    new { controller = "UsersAdditionalPreviousNames", action = "Index" }
);
24
danludwig