2012-04-17 41 views
0

我並不擅長ajax,所以我很難找到更好的答案。我已經嘗試創建單獨的「.js」文件,其中包含對其他服務的調用(用於驗證用戶會話),但它不起作用。如何在顯示mvc視圖之前「預處理」ajax調用?

我的目標是在加載視圖之前驗證用戶會話(在MVC中)。使用驗證給定會話與數據庫的邏輯的唯一方法是使用ajax通過url調用休息服務。

此代碼工作得很好(內部主頁查看):

<script type="text/javascript"> 
    $(function() { 
     $.get('@Url.Action("GetSession", "Auth")', function (getdata) { 
      if (getdata.UserID && getdata.SessionID && getdata.SourceIP) { 
       $.post('http://website.com/Rest/Authenticate/ValidateUserSession', JSON.stringify(getdata), function (response) { 
        if (response == false) { window.location.replace('@Url.Action("SignUp", "Auth")'); } 
       }); 
      } else { 
       window.location.replace('@Url.Action("SignUp", "Auth")'); 
      } 
     }); 
    }); 
</script> 
<h2> 
    Home</h2> 

    @*The content here should not appear, unless session is validated.*@ 

唯一的問題是,驗證的過程需要3〜5秒,所以用戶看到的主頁Ajax調用返回前結果驗證是否成功。如果驗證/響應返回false它將重定向到sigup頁面。

我不知道這個過程的最佳做法是什麼。現在我只是不希望主視圖顯示給用戶,除非會話被驗證。希望我能解釋清楚。如果你有更好的想法,請提出建議。

附加信息:

如果可能的話,我喜歡這樣做:

<script type="text/javascript"> 
    if(!validated()){ 
     window.location.replace('@Url.Action("SignUp", "Auth")'); 
    } 
</script> 
<h2> 
    Home</h2> 

    @*The content here should not appear, unless session is validated.*@ 

回答

0
  1. 爲什麼你不能在消耗服務器端REST服務?從技術上講,沒有理由不能這樣做。這裏有一個教程正是討論:http://codebetter.com/johnvpetersen/2012/03/22/accessing-a-asp-net-webapi-rest-service-from-asp-net-mvc/

這應該照顧一切。如果由於某種原因您無法進行此操作,請執行以下操作:

  1. 使您的主頁成爲局部視圖。

  2. 而不是加載主頁,裝入處理圖標的空白頁(或者你想顯示的任何消息。)

  3. 聊到REST服務,如果得到的回答則使用加載主頁的局部視圖JQuery else加載註冊局部視圖。

這裏有一篇文章討論如何使用jQuery加載MVC局部視圖:http://www.codeproject.com/Articles/34221/JQuery-Partial-Views-in-ASP-NET-MVC

+0

這是一個很好的文章,但我要保持服務的調用而無需刷新頁面。我會嘗試這種局部視圖。謝謝! – fiberOptics 2012-04-17 06:01:44

相關問題