1

在 ASP.NET MVC 3 项目中使用区域时,我偶然发现这个问题与 ActionLink 和 RedirectToAction 方法有关。

我在根级别的 AccountController 中添加了以下代码...

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
            {
                return Redirect(returnUrl);
            }
            else
            {
                if (Roles.Provider.IsUserInRole(model.UserName, "Admin"))
                {
                    return RedirectToAction("Index", "Admin", new { area = "Admin" });
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }                        
            }
        }
        else
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }

根据当前登录用户所属的角色,我重定向到相应的区域。到目前为止,它工作正常。

管理区域如下所示...

在此处输入图像描述

在这个区域,我从根目录复制了_ViewStart.cshtml 。

Log OffAboutHome等链接不起作用,因为它们指向的路线不存在。

在此处输入图像描述

我不想在 Areas 文件夹中创建另一个帐户或 Home 控制器。我想使用根目录中的那个。

根据收到的建议,更改_LogOnPartial.cshtml代码,如图所示...

@if(Request.IsAuthenticated) {
    <text>Welcome <strong>@User.Identity.Name</strong>!
    [ @Html.ActionLink("Log Off", "LogOff", "Account", new { area = "" }) ]</text>
}
else {
    @:[ @Html.ActionLink("Log On", "LogOn", "Account", new { area = "" }) ]
}

产生以下 URL ...

在此处输入图像描述

这仍然不对。

4

2 回答 2

3

在rool级别的区域将是new { area = "" }。空字符串。

于 2013-04-21T01:52:19.223 回答
1

通过更改_LogOnPartial.cshtml代码来改进 gdoron 和 Jasen 建议的解决方案,如下工作...

@if(Request.IsAuthenticated) {
    <text>Welcome <strong>@User.Identity.Name</strong>!
    [ @Html.ActionLink("Log Off", "LogOff", "Account", new { area = "" }, null) ]</text>
}
else {
    @:[ @Html.ActionLink("Log On", "LogOn", "Account", new { area = "" }, null) ]
}

同样,还更改了_Layout.cshtml中HomeAbout菜单项的ActionLink参数,如下所示...

    <div id="menucontainer">
        <ul id="menu">
            <li>@Html.ActionLink("Home", "Index", "Home", new { area = ""}, null)</li>
            <li>@Html.ActionLink("About", "About", "Home", new { area = "" }, null))</li>
        </ul>
    </div>

链接显示正确并且现在可以使用...

在此处输入图像描述

于 2013-04-21T10:49:07.537 回答