14

我有一个基于 ASP.NET MVC2 RC2 构建的大型现有应用程序。

我所有的链接都是这样的:htp//site/controller/action/id

我刚刚添加了一个名为:BigBird的区域。

现在,当我在 BigBird 区域时,我的所有链接都如下所示:htp://site/ BigBird /controller/action/id

问题是我的新区域中不存在这些控制器/操作。所以我必须在我的应用程序中遍历所有的操作链接并放置这个路由值:area = string.empty

有没有办法解决?

4

2 回答 2

12

如果您使用标准的 MVC 方法(除了可能覆盖它们来调用您自己的版本),我不知道是否可以解决它,但是如果您使用的ActionLink<TController>是 MvcFutures 库中提供的或其他通用方法,那么您可以。

MvcFutures 方法调用ExpressionHelper.GetRouteValuesFromExpression(),它在控制器上查找一个ActionLinkAreaAttribute以确定区域。所以你可以在你的主要“区域”中装饰你的控制器,如下所示:

[ActionLinkArea("")]
[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

应使用标准语法正确生成操作链接:

<%= Html.ActionLink<HomeController>(c => c.Index(), "Home") %>
于 2010-03-08T18:59:56.640 回答
0

你可以做两件事之一。您可以将控制器/操作移动/复制到适当的区域,或者为新区域编写一些新控制器(这是我推荐的方法),或者您可以编写一个自定义路由,将新区域强制到根(我不推荐,因为它违背了拥有区域的全部目的):

routes.MapRoute(
    "BigBird_Override",                                             
    "BigBird/{controller}/{action}/{id}",                          
    new { area = String.Empty }
);
于 2010-02-27T06:17:51.497 回答