2

Ajax.BeginForm を使用して、特定のコントローラー アクションに ajax ポストバックを実行するフォームを作成し、応答ビューを UpdateTargetId に挿入しています。

using (Ajax.BeginForm("Save", null,
        new { userId = Model.UserId },
        new AjaxOptions { UpdateTargetId = "UserForm" },
        new { name = "SaveForm", id = "SaveForm" }))
   {
    [HTML SAVE BUTTON]
   }

ユーザーセッションがタイムアウトしてログインページにリダイレクトされる場合を除いて、すべてがうまく機能します。その後、Authorize 属性のために Ajax 呼び出しからログイン ページが返され、html が UpdateTargetId に読み込まれるため、ユーザー プロファイル ページ (Target Id) 内にログイン ページ html が作成されます。私のコントローラーアクションは次のようになります。

[Authorize]
public ActionResult Save(Int32 UserId)
{
    //code to save user
    return View("UserInfoControl", m);

}

どうすればこの問題を解決できますか?

更新 (2011-10-20):この正確な問題に関する Phil Haack の投稿を見つけました - http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-あなた-donrsquot-want.aspx。彼のソリューションを消化または実装する機会はまだありません。

4

1 に答える 1

0

アクション内から認可の問題を処理できると思います。最初に [Authorize] を削除し、次のコードを使用します。

public ActionResult Save(Int32 UserId)
{
    if (!User.Identity.IsAuthenticated) 
    { 
        throw new Exception();
    }
    //code to save user
    return View("UserInfoControl", m);

}

次に、AjaxOptions に OnFailure 条件を配置して、ページなどをリダイレクトできます。

于 2009-10-08T20:53:41.503 に答える