在 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 Off,About,Home等链接不起作用,因为它们指向的路线不存在。
我不想在 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 ...
这仍然不对。