asp.net MVC ajax方法没有按正确的顺序调用
问题描述:
我有一个asp.net应用程序,我想显示登录弹出如果用户未经过身份验证,如果用户身份验证,然后memberarea弹出相同的页面上。asp.net MVC ajax方法没有按正确的顺序调用
我在151API视图这个控制器的操作方法
[ActionName("151LoginAPI")]
public ActionResult NewCallRecording(string ID, string PSSWD, string ACCID, string PASSWDINT)
{
....
....
...
return view();
}
我这样做在的document.ready功能
$.ajax({
type: "POST",
dataType: "json",
url: "/recording/verifyUser",
data: {
ID: $("#ID").val(),
PSSWD: $("#PSSWD").val(),
ACCID: $("#ACCID").val(),
PASSWDINT: $("#PASSWDINT").val()
},
success: function (data) {
if (data == "success") {
jQuery('#dialog-AddCallRecording').dialog({ closeOnEscape: false });
$(".ui-dialog-titlebar").hide();
$("#dialog-AddCallRecording").dialog({ dialogClass: 'transparent', modal: true });
$("#dialog-AddCallRecording").dialog("open");
}
else {
jQuery("#dialog-user-login").dialog('option', 'position', 'center');
jQuery("#dialog-user-login").dialog("open");
}
}
});
我已经定义verifyuser并且认证和显示适当的弹出窗口。
它工作正常,但问题是当我设置断点。我看到NewCallRecording始终被击中。然后验证用户被击中。我想要使验证用户首先被检查,然后NewCallRecording actionmethod在用户打开/ NewCallRecording页面时被点击
请告诉我如何做到这一点。
答
VerifyUser调用是ajax,而NewCallRecording是一个控制器动作。如果这个动作是直接调用的,它会在Ajax调用之前执行,因为DOM由动作结果加载,在这种情况下,它是NewCallRedording ..
在这种情况下,我认为你需要做服务器端验证如果用户未验证,则将用户重定向到登录页面。
我应该在这种情况下删除ajax调用吗?另外,如果我使NewCallRecording actionmethod只是GEt操作的虚拟操作方法,并为POST创建另一个方法?但我需要我认为...我真的很困惑 – DotnetSparrow 2013-02-28 07:38:07
如果您想要在页面加载之后验证用户的其他号召性用语,则Ajax非常有用。你可以做虚拟动作调用,做ajax验证,然后调用实际动作,但是这看起来有些复杂。考虑用一个属性来修饰你的动作,该属性可以是一个动作过滤器,在动作执行之前验证用户。 – 2013-02-28 07:41:13