2012-04-17 39 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

相关问题