【问题标题】:How to "PRE-PROCESS" ajax call before showing the mvc view?如何在显示 mvc 视图之前“预处理”ajax 调用?
【发布时间】:2012-04-17 02:08:44
【问题描述】:

我不是 ajax 专家,所以我很难找到更好的答案。我尝试创建单独的“.js”文件,其中包含对休息服务的调用(用于验证用户会话),但它不起作用。

我的目标是在加载我的视图之前验证用户会话(在 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.*@

【问题讨论】:

    标签: c# ajax model-view-controller rest


    【解决方案1】:
    1. 为什么不能在服务器端消费其余服务?从技术上讲,应该没有理由不能这样做。这是一个讨论这个问题的教程:http://codebetter.com/johnvpetersen/2012/03/22/accessing-a-asp-net-webapi-rest-service-from-asp-net-mvc/

    这应该可以解决所有问题。如果由于某种原因这对您来说是不可能的,那么您可以执行以下操作,

    1. 使您的主页成为局部视图。

    2. 不是加载主页,而是加载一个带有处理图标(或您想要显示的任何消息)的空白页面。

    3. 与 REST 服务对话,如果收到回复,则使用 JQuery 加载主页的部分视图,否则加载注册部分视图。

    这是一篇讨论如何使用 JQuery 加载 MVC 部分视图的文章:http://www.codeproject.com/Articles/34221/JQuery-Partial-Views-in-ASP-NET-MVC

    【讨论】:

    • 那是一篇好文章,但是我必须在不刷新页面的情况下维护服务的调用。我会尝试这种局部视图。谢谢!
    猜你喜欢
    • 2011-04-01
    • 2020-02-08
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2021-11-19
    • 2016-11-24
    相关资源
    最近更新 更多