2013-02-28 71 views
0

我有一个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页面时被点击

请告诉我如何做到这一点。

回答

0

VerifyUser调用是ajax,而NewCallRecording是一个控制器动作。如果这个动作是直接调用的,它会在Ajax调用之前执行,因为DOM由动作结果加载,在这种情况下,它是NewCallRedording ..

在这种情况下,我认为你需要做服务器端验证如果用户未验证,则将用户重定向到登录页面。

+0

我应该在这种情况下删除ajax调用吗?另外,如果我使NewCallRecording actionmethod只是GEt操作的虚拟操作方法,并为POST创建另一个方法?但我需要我认为...我真的很困惑 – DotnetSparrow 2013-02-28 07:38:07

+0

如果您想要在页面加载之后验证用户的其他号召性用语,则Ajax非常有用。你可以做虚拟动作调用,做ajax验证,然后调用实际动作,但是这看起来有些复杂。考虑用一个属性来修饰你的动作,该属性可以是一个动作过滤器,在动作执行之前验证用户。 – 2013-02-28 07:41:13

相关问题