Этот код в основной странице:
<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 = ""}
на каждой ссылке в на основной сайт?
Его очень раздражающее, чтобы иметь это на каждой ссылке на сайт.
Действия с URL-адресом зависят от местоположения ссылки. Итак, new {area = ""}
не сообщает вызову Url.Action об отсутствии области, а сообщает ему использовать корневую область . Если вы опустите new {area = ""}
из вызова Url.Action, он попытается создать URL-адрес для указанного действия в указанном контроллере в пределах текущей области (" Площадь "есть в вашем случае).
Следовательно, это неизбежно, если вы хотите связать подобласть с корневой областью.
Я до сих пор не знаю, что делать дальше, если вы используете стандартные методы 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") %>