0

ログイン後にアクセスできるdivに部分ビューをロードするasp.net mvc razorアプリケーションを作成しました。

<% using (Ajax.BeginForm("Showproducts", "Home", new AjaxOptions {
    UpdateTargetId = "resdiv", OnBegin = "fstart()", OnSuccess = "fend()"
}, new { id = "_myform" }))
{ %>
    .....
<% } %>

ユーザーがコンピューターを長時間離れて (セッションが自動的にタイムアウトになります)、送信ボタンをクリックすると、resdiv にはログイン パネルを含む完全なサイトが表示されます。resdiv ではなく、ログイン パネルを含む完全なサイトを表示したい。この動作を回避する方法はありますか?

4

1 に答える 1

1

この動作を回避する方法はありますか?

はい、方法はあります。following blog postPhil Haack が、AJAX リクエストのフォーム認証モジュールをオーバーライドし、ログイン ページにリダイレクトする代わりに 401 ステータス コードを送信できるようにする非常に優れた手法を説明しているを読むことをお勧めします。

次に、クライアント側global AJAX handlerでステータス コードをテストできる場所を使用し、401 リダイレクトの場合はログオン ページにリダイレクトします。

たとえば、AspNetHaackNuGet をインストールしたら、次のグローバル エラー ハンドラーをビューに追加できます。

<script type="text/javascript">
    $(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
        if (jqXHR.status == 401) {
            // not authenticated => redirect to login page:
            window.location.href = '@FormsAuthentication.LoginUrl';
        }
    });
</script>
于 2013-03-04T08:14:02.787 に答える