Область значения по умолчанию набора - Предотвращение', новый {область = “”}' на каждой ссылке на сайт

Этот код в основной странице:

<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>

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

Для фиксации этого, я могу использовать это:

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

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

Его очень раздражающее, чтобы иметь это на каждой ссылке на сайт.

9
задан Fitzchak Yitzchaki 16 February 2010 в 06:29
поделиться

2 ответа

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

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

10
ответ дан 4 December 2019 в 14:28
поделиться

Я до сих пор не знаю, что делать дальше, если вы используете стандартные методы 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") %>
4
ответ дан 4 December 2019 в 14:28
поделиться
Другие вопросы по тегам:

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