3

我能够成功使用(索引视图中的代码)

  @if (@User.Identity.IsAuthenticated)
    {
    <div id="applicationHost">
        @Html.Partial("_splash")
    </div>

   @Scripts.Render("~/scripts/vendor");
        if(HttpContext.Current.IsDebuggingEnabled) {
            @Html.AntiForgeryToken()
            <script>
               window.userId = "@User.Identity.Name";
                console.log(window.userId);
            </script>
            <script type="text/javascript" src="~/App/durandal/amd/require.js" data-main="@Url.Content("~/App/main")"></script>

        } else {
            <!-- Remember to run the Durandal optimizer.exe to create the main-built.js  -->
            <script type="text/javascript" src="~/App/main-built.js"></script>
        }
    }
    else
    {
        <script src="~/Scripts/jquery-1.9.1.min.js"></script>

            <div id="login">
              @Html.Partial("Login")
            </div>

    }

在登录后(使用标准 mvc 帐户控制器和来自标准 mvc4 应用程序的登录表单)让应用程序最初被强制进入登录页面。

然后我在页脚添加了一个按钮来调用注销控制器方法(这个函数被添加到 shell.js 并且我已经验证它是在按下按钮时调用的)

 function logoff() {
            var token = $("input[name='__RequestVerificationToken']").val();

            $.ajax({
                url: "/Account/LogOff",
                cache: false,
                type: "POST",
                async: false,
                data: { "__RequestVerificationToken": token },
                success: function (data) {
                    log("from success in logoff", data, false); //this shows up in the log


                    return true;
                },
                error: function (data) {
                    return false;
                }

            });
        }

我已经通过控制器方法进行了调试,它成功调用了

  [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult LogOff()
        {
            try{
            WebSecurity.Logout();  //this call does not generate an error
            }   
            catch(Exception excp)
            {
                string msg = excp.Message;
            }
            return RedirectToAction("index", "HotTowel");
        }

调用 Index 页面并且不再对用户进行身份验证,但上面对 PartialView("Login") 的调用不会修改浏览器的内容。

我不明白为什么浏览器中没有加载登录部分视图。我在控制台中没有任何错误,也没有其他迹象表明有问题。

我搜索了一下,没有找到任何扩展 Hot Towel 模板以支持身份验证的示例。(除了关于如何设置身份验证令牌的一些事情之外)我采取了第一步,只需让索引视图能够在 durandal 应用程序加载之前强制用户登录。这很好用。

什么是让它工作的正确方法?我有一个使用 Durnadal 入门套件的示例,它显示了这种行为。我可以提供给任何需要的人。

shell.js 中的 javascript 返回似乎是重定向指示的索引页面的 html。(试图让警报显示这一切是有问题的)

致力于将样品送到 Skydrive 等

4

1 回答 1

0

我也有这个问题:

        <div id="login">
          @Html.Partial("Login")
        </div>

应该替换为

        <div id="login">
          @Html.Partial("../Account/Login")
        </div>

这样它就可以找到您希望呈现的登录名的直接路径。这应该可以解决您的问题。尽管您在“登录”页面上至少没有出现 404 错误,但这很奇怪。我怀疑某些错误处理已完成但未显示。

于 2013-06-18T10:28:17.753 回答