Html ASP.NET MVC-nav中带有身份验证的注册表菜单项
我是MVC世界的新手。我的布局文件中有一个Html ASP.NET MVC-nav中带有身份验证的注册表菜单项,html,asp.net-mvc,http-post,html.actionlink,Html,Asp.net Mvc,Http Post,Html.actionlink,我是MVC世界的新手。我的布局文件中有一个nav,供登录用户使用: <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink("Home", "Index", "Member")</li> <li>@Html.ActionLink("
nav
,供登录用户使用:
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Member")</li>
<li>@Html.ActionLink("My Profile", "MyProfile", "Member")</li>
<!-- User type Admin, then Admin Menu -->
<li>@Html.ActionLink("Admin Index", "AdminIndex", "Member")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<!-- Throws error /User/Logout not found -->
<li>@Html.ActionLink("Logout", "Logout", "User")</li>
<!-- Works Perfectly fine, but the link is on new line & different font/color/underlined -->
@if (Request.IsAuthenticated)
{
using (Html.BeginForm("Logout", "User", FormMethod.Post, new { id = "logoutForm" }))
{
<li><a href="javascript:document.getElementById('logoutForm').submit()">Logout</a></li>
}
}
</ul>
</div>
谁能帮我完成这项工作!!非常感谢您的帮助
谢谢我怀疑,尽管很难说,控制器不是UserController,而是AccountController(默认)或MemberController 在这种情况下,电话应该是
@Html.ActionLink("Logout", "Logout", "Account")
或
在您的额外编辑之后,我认为问题在于注销是一个帖子,链接只是一个Get请求,所以Mvc正在寻找一个Get操作/用户/注销。这里有一个关于如何将链接转换为帖子的答案 我可能会让您的链接在一些js代码中调用ajax命令。为了充分利用剃须刀的优点,您可以使用@Url.Action。按如下方式修改代码 您的导航将如下所示
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Member")</li>
<li>@Html.ActionLink("My Profile", "MyProfile", "Member")</li>
<!-- User type Admin, then Admin Menu -->
<li>@Html.ActionLink("Admin Index", "AdminIndex", "Member")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li><a href=# onclick="LogOut()">Log Out</a></li>
}
}
</ul>
</div>
- @ActionLink(“主页”、“索引”、“成员”)
- @ActionLink(“我的个人资料”、“我的个人资料”、“成员”)
- @ActionLink(“管理员索引”、“管理员索引”、“成员”)
- @ActionLink(“关于”、“关于”、“主页”)
}
}
然后,您的javascript函数需要位于导航页面可以访问的地方(您的_布局页面的底部可能是最简单的)
函数注销(){
$.ajax({
类型:“POST”,
url:@url.Action(“注销”、“用户”)“
});
}
希望这是有意义的,我还没有测试它,但你的链接现在应该像所有其他链接一样,你的控制器现在将获得一个POST请求,因此将访问你的注销方法。出现任何问题。使用
@Html.ActionLink(“注销”、“注销”、“用户”)会出现什么错误
link?如果您在UserController中发布了注销操作中的代码,这也会很有帮助。此外,您还可以有条件地检查某人是否在_布局中担任角色。我猜您的角色实现中有错误。如果您的角色实现没有错误,您可以简单地执行if(User.IsInRole(“admin”){//show link}
请不要同时问多个问题。对于第一个问题,请解释为什么它不起作用,否则我们根本帮不了你。@DavidG和peggy删除了第二个问题。也共享了错误。我假设代码应该是Html.BeginForm(“注销”,“帐户”…
取而代之的是?@DavidG,第二段操作名称是“注销”,控制器名称是“用户”。为什么是“帐户”在action name???中,该操作在UserController中处理,而不是在Account或Member Controller中处理。注册、登录、注销所有此类操作都在UserController中处理。布局文件-这是一个MembersLayout文件,由登录用户的文件使用。例如/Member/Index使用MembersLayout,它具有上述注销问题。请说明更多详细信息我应该提供帮助您解决问题的AIL。您能详细说明或在示例中展示真实的代码吗?因为我在js和/或ajax方面很差。我看到了您的ajax代码,但如何通过我的@Html.ActionLink("Logout", "Logout", "Member")
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Member")</li>
<li>@Html.ActionLink("My Profile", "MyProfile", "Member")</li>
<!-- User type Admin, then Admin Menu -->
<li>@Html.ActionLink("Admin Index", "AdminIndex", "Member")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li><a href=# onclick="LogOut()">Log Out</a></li>
}
}
</ul>
</div>
<script type="text/javascript">
function LogOut() {
$.ajax({
type: "POST",
url: "@Url.Action("Logout", "User")"
});
}
</script>