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 } }); |