我有一个基于ASP.NET MVC2 RC2构建的大型现有应用程序。
我的所有链接都是这样的:htp // site / controller / action / id
我刚刚添加了一个名为: BigBird 的区域。
现在,当我在BigBird区域时,我的所有链接都是这样的:htp:// site / BigBird / controller / action / id
问题是我的新区域中没有这些控制器/操作。所以我必须遍历我的应用程序中的所有actionlinks并将此routevalue:area = string.empty
有什么方法吗?
答案 0 :(得分:12)
如果你使用标准的MVC方法(除了可能覆盖它们来调用你自己的版本之外),我不知道如何使用它,但如果你使用的是ActionLink<TController>
或其他通用方法你可以使用MvcFutures lib。
MvcFutures方法调用ExpressionHelper.GetRouteValuesFromExpression()
,它在控制器上查找ActionLinkAreaAttribute
以确定区域。因此,您可以按如下方式在主“区域”中修饰控制器:
[ActionLinkArea("")]
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
应使用标准语法正确生成操作链接:
<%= Html.ActionLink<HomeController>(c => c.Index(), "Home") %>
答案 1 :(得分:0)
你可以做两件事之一。您可以将控制器/操作移动/复制到适当的区域或为新区域编写一些新的控制器(这是我推荐的方法),或者您可以编写一个强制新区域到根区域的自定义路径(我不建议,因为它打破了区域的整个目的):
routes.MapRoute(
"BigBird_Override",
"BigBird/{controller}/{action}/{id}",
new { area = String.Empty }
);