Установить область по умолчанию - Избегать `, new {area =" "}` для каждой ссылки на сайте - PullRequest
9 голосов
/ 16 февраля 2010

Этот код находится внутри главной страницы:

<li><a href="<%=Url.Action("Action", "Controller") %>">Main site link</a></li>
<li><a href="<%=Url.Action("AreaAction", "AreaController", new {area = "Area"}) %>">Area link</a></li>

Все ссылки работают хорошо, пока я не перейду к Area Link . Когда я иду туда, все маршруты основной зоны не работают.

Чтобы исправить это я могу использовать это:

<li><a href="<%=Url.Action("Action", "Controller", new {area = ""}) %>">Main site link</a></li>

У меня вопрос, есть ли способ избежать , new {area = ""} на каждой ссылке в основном на сайт?

Очень неприятно иметь это на каждой ссылке на сайте.

Ответы [ 2 ]

10 голосов
/ 16 февраля 2010

Действия URL относятся к расположению ссылки. Таким образом, new {area = ""} не сообщает вызову Url.Action об отсутствии области, он говорит ему использовать корневую область . Если вы опустите new {area = ""} в вызове Url.Action, он попытается создать URL для указанного действия в указанном контроллере в текущей области 1006 * (в вашем случае «Area»).

Следовательно, это неизбежно, если вы хотите установить связь из подрайона с корневой областью.

4 голосов
/ 08 марта 2010

Я до сих пор не знаю, где вы находитесь, если вы используете стандартные методы 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") %>
...