MVC区域 - 如何链接到BeginForm中的根文件夹

时间:2014-07-08 06:09:41

标签: asp.net-mvc

我需要定义一个指向我的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。

2 个答案:

答案 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