1. ホーム
  2. c#

[解決済み] ASP.NET MVCのAjaxレスポンスがUpdateTargetIdにビューを挿入する代わりに新しいページにリダイレクトされるようにするには?

2023-02-21 06:15:54

質問

Ajax.BeginFormを使用して、特定のコントローラアクションにAjaxポストバックを行い、アクションが成功した場合、ユーザーを別のページにリダイレクトするフォームを作成しています (アクションが失敗した場合、AjaxOptions UpdateTargetIdを使用してステータスメッセージを表示します)。

using (Ajax.BeginForm("Delete", null,
        new { userId = Model.UserId },
        new AjaxOptions { UpdateTargetId = "UserForm", LoadingElementId = "DeletingDiv" },
        new { name = "DeleteForm", id = "DeleteForm" }))
   {
    [HTML DELETE BUTTON]
   }

削除が成功した場合は、Redirectの結果を返しています。

[Authorize]
public ActionResult Delete(Int32 UserId)
{
    UserRepository.DeleteUser(UserId);
    return Redirect(Url.Action("Index", "Home"));
}

しかし、ホームコントローラインデックスビューはUpdateTargetIdに読み込まれるため、ページの中にページがあるような状態になってしまっています。 考えていることは2つ。

  1. 私がこれを設計しているかどうか 間違っており、このタイプのアクションを別の方法で処理する必要がある アクションを別の方法で処理する必要があります(ajaxを使用しない)。
  2. Redirect の結果を返す代わりに javascriptを含むビューを返します。 クライアント側でリダイレクトを行う javascript を含むビューを返します。

どなたか#1についてコメントをお持ちですか? あるいは、#2 が良い解決策である場合、"redirect javascript view" はどのように見えますか?

どのように解決するのですか?

この場合 JavascriptResult を使って実現します。

リダイレクトするために

return JavaScript("window.location = 'http://www.google.co.uk'");

現在のページを再読み込みする。

return JavaScript("location.reload(true)");

最もシンプルな選択肢のように思えます。