Мне основывались на большом существующем приложении MVC2 RC2 ASP.NET.
Все мои ссылки похожи на это: htp//сайт/контроллер/действие/идентификатор
Я просто добавил названную область: BigBird.
Теперь, когда я нахожусь в области BigBird, все мои ссылки похожи на это: htp://site/BigBird/controller/action/id
Проблема состоит в том, что ни один из тех контроллеров/действий не существует в моей новой области. Таким образом, я должен пройти все свои actionlinks на всем протяжении моего приложения и поместить этот routevalue: область = string.empty
Есть ли какой-либо путь вокруг этого?
Я не знаю, как обойти это, если вы используете стандартные методы MVC (кроме, возможно, переопределения их для вызова собственной версии), но если вы используете ActionLink
или другие общие методы, предоставленные в либе MvcFutures, то вы можете.
Методы MvcFutures вызывают ExpressionHelper.GetRouteValuesFromExpression()
, который ищет ActionLinkAreaAttribute
на контроллере для определения области. Поэтому вы можете оформить свои контроллеры в главной "области" следующим образом:
[ActionLinkArea("")]
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
Ссылки действия должны генерироваться правильно, используя стандартный синтаксис:
<%= Html.ActionLink<HomeController>(c => c.Index(), "Home") %>
Вы можете сделать одно из двух. Вы можете либо переместить / скопировать свои контроллеры / действия в нужную область, либо написать несколько новых контроллеров для новой области (это подход, который я рекомендую), либо вы можете написать собственный маршрут, который принудительно перемещает новую область в корень (что я не рекомендую, так как это сводит на нет всю цель наличия областей):
routes.MapRoute(
"BigBird_Override",
"BigBird/{controller}/{action}/{id}",
new { area = String.Empty }
);