我能够成功使用(索引视图中的代码)
@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 等