0

asp.net mvcで構築された私のWebサイトにログインするためのライトボックス/モーダルダイアログを作成したいと思っていました。ただし、私が考えることができる唯一の方法は、制限されたセクションにリンクするときに、ハイパーリンクの onClick イベントにロジックを入れることです。承認アクション フィルターを引き続き使用できるようにしたいと思います。承認が必要なアクション メソッドへのリンクをクリックすると、実際のリンクに進む前にライトボックス/モーダル ダイアログが表示されます。この理由は、リンクのイベントを配置するために覚えておく必要があるという繰り返しのタスクを実行したくないからです。

私が考えることができるこれを実装する唯一の方法は、サーバーからクライアントへの ajax プッシュ/コメットを実行して、コントローラーが続行する前に認証フィルターでボックスを表示することです。また、asp.net mvc で ajax プッシュ/コメットを実行するドキュメントもあまりありません。

もっと簡単な方法はありますか?

Digg のログイン ウィンドウがその例です。

4

1 に答える 1

2

要求が承認されていない場合に、ログインが必要なアクションとそうでないアクションがある場合は、クラスを使用してログインを必要とするアクションへのリンクを装飾します。承認が必要なリンクをクリックすると、モーダル ダイアログが表示されます。このダイアログは、クリックされたリンクの実際の URL がアクションの returnUrl パラメーターとして設定された状態で、ログイン アクションに投稿する必要があります。ログインに失敗した場合は、ログイン ビューにリダイレクトします (ログイン フォームの post アクションに returnUrl を追加します)。

注: これは、jQuery UI ダイアログを使用していることを前提としていますが、ダイアログのボタン インターフェイスは使用していません。正しいスタイルを取得するには、ボタン自体に UI クラスを追加する必要がある場合があります。jQuery UI を使用していない場合は、ダイアログで動作するようにダイアログ コードを調整します。

<% if (!Request.IsAuthenticated) { %>
$(function() {
    $('#loginDialog').hide().dialog({
         modal: true,
         ...
    });
    $('a.requires-login').click( function() {
         returnUrl = $(this).attr('href');
         $('#loginDialog').find('#returnUrl').val(returnUrl);
         $('#loginDialog').dialog('open');
         return false;
    });
<% } %>

<% if (!Request.IsAuthenticated) { %>
<div id="loginDialog">
    <% using (Html.BeginForm("Login","Account")) { %>
         <%= Html.TextBox( "returnUrl", null, new { style = "display: none;" } ) %>
         ... rest of form ...
    <% } %>
</div>
<% } %>
于 2009-09-21T12:12:23.880 に答える