Как указать область по умолчанию, не добавляя область = “” к каждому ActionLink

Мне основывались на большом существующем приложении MVC2 RC2 ASP.NET.

Все мои ссылки похожи на это: htp//сайт/контроллер/действие/идентификатор

Я просто добавил названную область: BigBird.

Теперь, когда я нахожусь в области BigBird, все мои ссылки похожи на это: htp://site/BigBird/controller/action/id

Проблема состоит в том, что ни один из тех контроллеров/действий не существует в моей новой области. Таким образом, я должен пройти все свои actionlinks на всем протяжении моего приложения и поместить этот routevalue: область = string.empty

Есть ли какой-либо путь вокруг этого?

14
задан GEOCHET 1 July 2012 в 01:03
поделиться

2 ответа

Я не знаю, как обойти это, если вы используете стандартные методы 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") %>
12
ответ дан 1 December 2019 в 14:43
поделиться

Вы можете сделать одно из двух. Вы можете либо переместить / скопировать свои контроллеры / действия в нужную область, либо написать несколько новых контроллеров для новой области (это подход, который я рекомендую), либо вы можете написать собственный маршрут, который принудительно перемещает новую область в корень (что я не рекомендую, так как это сводит на нет всю цель наличия областей):

routes.MapRoute(
    "BigBird_Override",                                             
    "BigBird/{controller}/{action}/{id}",                          
    new { area = String.Empty }
);
0
ответ дан 1 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: