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