2016-01-01 2 views
-2

Я заметил что-то странное в моем проекте MVC. Я действительно вернулся к версии ванили, чтобы проверить ее, и выяснил, что следующий (последний элемент списка является моим единственным дополнением к проекту, за исключением действия Тест в контроллере, только возвращающий пустой экземпляр View) хорошо работает.Почему мне нужно объявлять новый контроллер, когда я добавляю стиль ActionLink?

<ul class="nav navbar-nav"> 
    <li>@Html.ActionLink("Home", "Index", "Home")</li> 
    <li>@Html.ActionLink("About", "About", "Home")</li> 
    <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
    <li>@Html.ActionLink("Test", "Test", "Home")</li> 
</ul> 

Однако, когда я добавил стиль к ссылке действия следующим образом, я получаю сообщение об ошибке. Это работает, но теперь VS замечает, и когда я проверяю замечание, он спрашивает меня, хочу ли я создать новый контроллер Shared и действие Тест.

<ul class="nav navbar-nav"> 
    <li>@Html.ActionLink("Home", "Index", "Home")</li> 
    <li>@Html.ActionLink("About", "About", "Home")</li> 
    <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
    <li>@Html.ActionLink("Test", "Test", "Home", new { @style = "color: blue;" })</li> 
</ul> 

Почему это так? Это настоящая проблема?

+0

перегрузки вы используете, не выходит, значение маршрута предшествует HTML атрибуты! – Transcendent

+0

@Transcendent Ну, технически говоря, перегрузка, которую я использую **, существует **, но это не та, которую я ** использовал **, хе-хе. Ваш комментарий следует за ответом Дэвида ниже, не так ли? Я посмотрю на него (позже) утром. Есть ли что-нибудь, что я могу улучшить с вопросом, BTW? Я вижу -1 и не понимаю, почему. –

+0

Если вы просто посмотрели информацию о перегрузках, которую показывает VS, не нужно было бы ставить вопрос. Однажды я столкнулся с этой проблемой, и я просто следил за перегрузками, и я обнаружил, что перед атрибутами html есть параметр параметра route объекта. Серьезно не сложно ответить :) – Transcendent

ответ

4

Этот способ a finite number of overloads. Ваш «рабочий» вариант, скорее всего, разрешающие this one, который явно ссылается на «Home» контроллер, как ожидалось:

ActionLink("Test", "Test", "Home") 

Однако, ваш «не работает» версия кажется, что было бы разумно принять решение о this one, который «работает "для HTML атрибутов, но изменений, что "Home" означает в данном случае, рассматривая его в качестве значения маршрута (который, вероятно, не разбираются в ничего полезного и игнорируются):

ActionLink("Test", "Test", "Home", new { @style = "color: blue;" }) 

ли это на самом деле генерировать правильный маршрут клиентская ссылка? Если это так, я бы посчитал это счастливым совпадением, но не стал бы полагаться на него.

Вы, вероятно, ищете this overload, который будет выглядеть следующим образом:

ActionLink("Test", "Test", "Home", null, new { @style = "color: blue;" }) 
+0

Это было сложно. Вы правы в своих предположениях. Однако даже после того, как я прочитал и понял ваше объяснение (+1 для связи) ** дважды **, я все еще не видел проблемы. В третий раз я увидел, что параметр изменяется от * string controllerName * до * object routeValues ​​* на ** третьей ** позиции. Сбивающий порядок параметров (в сочетании с тем, что я не читаю все детали). И интоксикация, связанная с входом в 2016 году, могла бы способствовать, ха-ха. –