关于jquery:asp .net mvc3 +检查用户是否在使用$ .ajax帖子时登录

asp .net mvc3 + check if user is logged in when using $.ajax post

我正在asp .net mvc 3中建立一个网站。

我正在尝试创建一个简单的切换按钮,可用于"添加到收藏夹"和
"从收藏中删除"。 但是,如果用户已登录,我只想要此功能
否则我想指导他到"登录"页面。

切换按钮运行良好,但不检查用户是否已登录。 如果一个
用户未登录然后单击按钮切换但不更新
数据库。 我希望它直接进入登录页面。

我的代码如下:

视图:

1
2
3
4
5
    @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();" })
    }

jQuery的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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();
        }
    });
}

控制器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//
// 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发布之前检查用户是否已登录? 如果他没有登录
我如何指导他到登录页面?


如果用户未登录,为什么不直接显示您的登录操作的链接? 你根本不需要jQuery - 当你第一次渲染页面时已经可以确定用户是否已登录时,Ajax调用是完全多余的。

1
2
3
4
5
6
7
8
9
10
@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)
}


您可以在所有ajax调用之后运行一个函数,并验证页面是否被重定向,例如,如果您的登录页面具有如下所示的h2标题:

1
Log On

您可以检测到它并重定向自己:

1
2
3
4
5
$(document).ajaxComplete(function (e, xhr) {
    if(xhr.responseText.indexOf("Log On") != -1) {
       // redirect code here
    }
});