1

我使用 ASP.NET MVC2 Web 应用程序创建了一个新的 MVC2 项目,它为我提供了默认网站。我添加了一个简单的区域,其中有一个 Home Controller 和一个 Index 视图。这导致了编译器给出的第一个问题“找到了与控制器名称'Home'匹配的多种类型”。我将 Home 更改为 Main 并编译。

我添加了一个新选项卡来引用我所在区域的索引视图,打开网站并开始单击选项卡。访问Area index页面时,如果不更改菜单就无法返回Home或About页面,如下:

<ul id="menu">              
     <li><%= Html.ActionLink("SampleArea.Main", "Index", "Main", new { area = "SampleArea" }, null)%></li>
     <li><%= Html.ActionLink("Home", "Index", "Home", new { area = "" }, null)%></li>
     <li><%= Html.ActionLink("About", "About", "Home", new { area = "" }, null)%></li>
</ul>

然后我可以正确地循环浏览选项卡。然后,我在 Account 控制器的 LogOff 视图中更改了代码,如下所示:

public ActionResult LogOff()
{
    FormsService.SignOut();

    //return RedirectToAction("Index", "Home");
    return RedirectToAction(Request.UrlReferrer.AbsolutePath.ToString());
}

如果用户注销,我正在使用 UrlReferrer.AbsolutePath 返回调用页面。如果调用页面恰好是 SampleArea 中的视图,.AbsolutePath 包含“/SampleArea”。这是因为控制器和视图是默认的,所以它们不包括在内。随着它的继续,我收到以下错误消息:

无法找到该资源。
说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

请求的 URL:/Account/SampleArea

我的理解是 /Account 已添加,因为这是执行 LogOff 时它所在的控制器。它认为 /SampleArea 是一个动作,因此添加了当前控制器来完成路由。

使用 UrlReferrer.AbsolutePath,有什么方法可以将 SampleArea 指定为一个区域,或者我可以做些什么来返回正确的页面?

新加法
这比我想象的还要奇怪。我打开了我目前正在开发的网站,并将视图 LogOut 中的 return 语句更改为使用 AbsolutePath 返回。断点显示它包含“/Club/PrivacyPolicy”。但是,我收到相同的错误消息,但有以下区别:

请求的 URL:/Login/Club/PrivacyPolicy

为什么它应该在它前面加上 /Login 是一个视图,而不是 /Account 是一个控制器?事实上,它为什么要在它前面加上任何东西呢?/Club/PrivacyPolicy 是 Global.asax.cs 中的有效路由。

4

1 回答 1

0

我终于弄清楚了如何返回触发 LogOn 或 LogOut 请求时所在的页面。我使用了以下代码。

Html.ActionLink("Member LogOn", "LogOn", "Account", new { area = "", returnUrl = HttpContext.Current.Request.RawUrl }, null)

这会产生

<a href='/LogIn/LogOn?returnUrl=%2FContactUs'>Member LogOn</a>

例如。

在我的 HttpPost ActionResult LogOn 中,我有

if (!String.IsNullOrEmpty(returnUrl))
{
    return Redirect(returnUrl);
}
    else
{
    return RedirectToAction("Index", "Home");
}

有时我发现我只需要 HttpContext.Request.RawUrl。

我不太确定它为什么生成 /LogIn/LogOn 而不是 /Account/LogOn,但它按预期工作。

于 2010-12-20T11:19:27.730 回答