2013-02-28 62 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

相關問題