我在我的 ASP.NET MVC3 网站中有一个部分,用户可以在其中单击一个按钮以将条目添加到他们帐户中的“已保存项目”部分。这是通过 JQuery Ajax 请求完成的,如果他们已登录,则效果很好。如果他们没有登录,我希望他们被重定向到登录页面,然后自动将条目添加到他们的 Saved项目部分。
我让所有部分单独工作 - 即当单击按钮时,如果未登录,则会显示登录框。登录弹出窗口也可以成功运行。问题是试图一次无缝地完成所有事情。这是我到目前为止的代码:
保存按钮的单击事件 - 检查用户是否一路登录:
var loggedIn = false;
$(document).ready(function () {
$('a#saveSearch').live('click', function (event) {
$.get('@Url.Action("IsLoggedIn", "Account", null)', function (response) {
if (response == "True")
loggedIn = true;
else
loggedIn = false;
});
if (loggedIn){
SaveSearch();
}
else{
$('#dialog').dialog('open');
SaveSearch(); //don't think this is correct because it hits this line before login is complete
}
});
保存到数据库的功能:
function SaveSearch(){
var url = '@Url.Action("SaveSearch", "User")';
$.ajax({
url: url,
type: 'POST',
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
json: "@Html.Raw(Session["MyFormString"].ToString())"
}),
success: function (data) {
$('a#saveSearch').attr('disabled', "disabled");
$('div#savedResponse').html('<p>Search saved to user account</p>');
},
error: function () {
}
});
}
});
JQuery UI 对话框弹出:
$(function () {
$('#dialog').dialog({
autoOpen: false,
width: 400,
resizable: false,
title: 'Login',
modal: true,
open: function(event, ui) {
$(this).load("@Url.Action("Logon", "Account", null)");
},
buttons: {
"Close": function () {
$(this).dialog("close");
}
}
});
我认为我的代码有一些根本性的问题,因为这样,登录弹出窗口只出现一秒钟,然后立即消失。看起来我需要让它停止推进代码,直到登录完成。
任何有助于实现这一目标的建议或帮助将不胜感激。