我需要定义一个指向我的Root共享文件夹中的LogOff控制器的链接;在BeginForm标签内。
@using Microsoft.AspNet.Identity
@if (Request.IsAuthenticated) {
using (Html.BeginForm("", "", FormMethod.Post, new { id = "logoutForm", action = "Account/LogOff"}))
{
@Html.AntiForgeryToken()
@Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
@: | <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
}
}
else {
@Html.ActionLink("Register", "Register", "Account")
@: |
@Html.ActionLink("Login", "Login", "Account")
}
如果我在根文件夹中,则上述工作正常。但如果点击区域,它会给我无法找到资源错误。
请求的网址:/ MyApp / Area / Account / LogOff
正确的链接应该是/ MyApp / Account / LogOff
我看到了使用@ HTML.ActionLink的示例,但更喜欢在BeginForm中定义它,因此不会向用户显示该URL。
答案 0 :(得分:1)
我用以下代码解决了这个问题。
首先我按如下方式映射路线
//Route config for logging off from areas.
routes.MapRoute(
name: "LogOff",
url: "Account/LogOff/",
defaults: new { controller = "Account", action = "LogOff" }
);
然后调用注销路由,我使用了以下
@using (Html.BeginRouteForm("LogOff", FormMethod.Post, new { id = "logoutForm" })) {
@Html.AntiForgeryToken()
<a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
}
答案 1 :(得分:0)
将Area routevalue添加到BeginForm参数可能更容易。将其留空以将其指向根区域,如下所示: new {Area =“”}
using (Html.BeginForm("LogOff", "Account", new { Area = "" }, FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
@Html.AntiForgeryToken()
<ul class="nav navbar-nav navbar-right">
<li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
</ul>
}
这是使用MVC 5