6

asp .net mvc 3 で Web サイトを構築しています。

「お気に入りに追加」と「お気に入りから削除」に使用できるシンプルなトグルボタンを作成しようとしています。ただし、ユーザーがログインしている場合にのみこの機能が必要です。それ以外の場合は、ユーザーを「ログイン」ページに誘導します。

トグル ボタンはうまく機能しますが、ユーザーがログインしているかどうかはチェックしません。ユーザーがログインしていない場合、ボタンをクリックすると切り替えられますが、データベースは更新されません。ログインページに誘導したい。

私のコードは以下の通りです:

意見:

<div class="save-unsave-link">
    @if(Model.IsPropertySaved) {
        @Html.ActionLink("Remove Property", "RemoveSavedProperty", "Property", new { id = Model.Property.PropertyId }, new { @class="unsave-property", onclick = "saveProperty();" })      
    } else {
        @Html.ActionLink("Save Property", "AddSavedProperty", "Property", new { id = Model.Property.PropertyId }, new { @class="save-property", onclick = "saveProperty();" })
    }
</div>

jQuery:

function saveProperty() {
    $('.save-unsave-link').delegate("a", "click", function (e) {
        var id = $(this).attr('href').match(/\d+/);
        if ($(this).hasClass('unsave-property')) {
            $.ajax({
                url: this.href,
                dataType: "text json",
                type: "POST",
                data: {},
                success: function (data, textStatus) { }
            });
            $(this).removeClass().addClass("save-property")
                .attr('href', '/Property/RemoveSavedProperty/' + id)
                .text('Remove Property');
            e.preventDefault();
        } else {
            var id = $(this).attr('href').match(/\d+/);
            $.ajax({
                url: this.href,
                dataType: "text json",
                type: "POST",
                data: {},
                success: function (data, textStatus) { }
            });
            $(this).removeClass().addClass("unsave-property")
                .attr('href', '/Property/AddSavedProperty/' + id)
                .text('Save Property');
            e.preventDefault();
        }
    });
}

コントローラ:

//
// POST: /Property/AddSavedProperty
[HttpPost]
[Authorize]
public void AddSavedProperty(int id)
{
    websiteRepository.AddSavedProperty(id);
}

//
// POST: /Property/RemoveSavedProperty
[HttpPost]
[Authorize]
public void RemoveSavedProperty(int id)
{
    websiteRepository.RemoveSavedProperty(id);
}

ユーザーがajax投稿の前にログインしているかどうかを確認するにはどうすればよいですか? 彼がログインしていない場合、どうすれば彼をログインページに誘導できますか?

4

2 に答える 2

4

ユーザーがログインしていない場合、Login アクションへのリンクをレンダリングしないのはなぜですか? これには jQuery はまったく必要ありません。最初にページをレンダリングするときにユーザーがログインしているかどうかをすでに判断できる場合、Ajax 呼び出しはまったく不要です。

@if (User.Identity.IsAuthenticated)
{
    @Html.ActionLink("Save Property", "AddSavedProperty", "Property", new { id = Model.Property.PropertyId },
        new { @class="save-property", onclick = "saveProperty();" })
}
else
{
    @Html.ActionLink("Save Property", "Login", "Login",
        new { returnUrl = ViewContext.HttpContext.Request.Url.PathAndQuery }, null)
}
于 2012-11-21T21:48:56.407 に答える
1

すべての ajax 呼び出しの後に関数を実行し、ページがリダイレクトされたかどうかを確認できます。たとえば、ログイン ページに次のような h2 タイトルがあるかどうかを確認できます。

<h2>Log On</h2>

あなたはそれを検出し、自分自身をリダイレクトすることができます:

$(document).ajaxComplete(function (e, xhr) {
    if(xhr.responseText.indexOf("<h2>Log On</h2>") != -1) {
       // redirect code here
    }
});
于 2012-11-21T22:14:40.023 に答える