53

У меня есть ссылка на страницу бритвы ниже.Razor actionlink автогенерирует? Длина = 7 в URL?

@Html.ActionLink("Create New Profile", "Create", "Profile", new { @class="toplink" }) 

Я вижу, просмотреть исходный код страницы, которая находится ниже

<a href="/admin/profile/create?length=7" class="toplink">Create New Profile</a> 

Когда я нажимаю на ссылку. URL-адрес выглядит следующим образом.

http://localhost:54876/admin/profile/create?length=7 

Я не хочу? Длина = 7. Почему это сгенерировано автоматически.

+0

это должно быть как-то связано с вашими маршрутами. По умолчанию этот `ActionLink` должен генерировать href`/Profile/Create`. Где «Профиль» - это аргумент контроллера, а «Создать» - это аргумент метода действия. Тот факт, что `/ admin` помещается в href, подчеркивает эту проблему. можете ли вы показать свои маршруты? – RPM1984 2010-12-05 07:43:23

ответ

85

ActionLink переопределить использование спичек (string linkText, string actionName, Object routeValues, Object htmlAttributes). Таким образом, ваше значение «Профиль» передается в параметр routeValues. Поведение этой функции по отношению к этому параметру состоит в том, чтобы взять на нее все общедоступные свойства и добавить их в список значений маршрута, используемых для создания ссылки. Поскольку String имеет только одно общедоступное свойство (Length), вы получаете «length = 7».

Правильная перегрузки вы хотите использовать это (string linkText, string actionName, string controllerName, Object routeValues, Object htmlAttributes) и вы называете это Лками так:

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"}) 
7

Я не уверен, что точная причина этого, но изменить его:

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" }) 

Я не знаю, какой перегружать MVC выбирает, когда вы покидаете от последнего параметра (htmlattributes добавленная одна), но это исправит. На днях я буду исследовать и точно выяснить, что происходит.

+0

Этот вид работал для меня, но я все еще получал ссылку bum ... Я получил `~/Account/Manage/user = ortund`, тогда как мне нужно` ~/Account/Manage/ortund` – Ortund 2014-09-11 12:46:13

+0

Вы можете просто используйте null. По крайней мере, это то, что я всегда использую. – 2015-08-04 17:35:41

0

Еще одна вещи отметить, так как вы определяете контроллер в @ActionLink, что вам не нужно делать , например, представление, которое выражается в вашем «Создать новый профиль» @ActionLink, может быть «/admin/profile/index.cshtml», представление, в котором перечислены существующие профили, в этом случае вам не нужно определять контроллер в @ActionLink как @ActionLink уже относится к ProfileController, поэтому ваш @ActionLink может быть

@Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" }) 

Я использовал null вместо new{}, как отмеченный ответ делает, я думаю, что это больше подходит сам. Перегрузки ActionLink - это не самая простая вещь.

 Смежные вопросы

  • Нет связанных вопросов^_^