Razor ActionLink Автогенерирование? Длина = 7 в URL?
-
08-10-2019 - |
Вопрос
У меня есть ссылка ниже на странице бритвы:
@Html.ActionLink("Create New Profile", "Create", "Profile", new { @class="toplink" })
Он появляется в источнике просмотра TES, как показано ниже:
<a href="/admin/profile/create?length=7" class="toplink">Create New Profile</a>
Когда я нажимаю на ссылку, URL такой:
http://localhost:54876/admin/profile/create?length=7
Я не хочу ?length=7
. Отказ Почему этот автоматически генерируется?
Решение
То ActionLink
Переопределить вас используете совпадения (String LinkText, string actionname, объект Routevalues, объект htmlattributes) переопределить. Так что ваше значение «профиля» передается на routeValues
параметр. Поведение этой функции по отношению к этому параметру состоит в том, чтобы взять все общедоступные свойства на нем и добавить его в список значений маршрута, используемых для генерации ссылки. Поскольку строка имеет только одну публичную собственность (длина), которую вы в конечном итоге с «длиной = 7».
Правильная перегрузка, которую вы хотите использовать, является (String LinkText, String DiageName, строковое управление, объект Routevalues, объект htmlattributes) И вы называете это Loke так:
@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"})
Другие советы
Я не уверен, что точная причина этого, но измените его на:
@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" })
Я не знаю, какая перегрузка MVC выбирает при выходе из последнего параметра (htmlattributes
это добавлена), но это исправит это. На днях я буду расследовать и выяснить, что именно происходит.
Другое, чтобы отметить, так как вы определяете контроллер в @ActionLink
, который вам может не нужно делать, например, мнение, что ваш «создать новый профиль» @ActionLink
Выражается в может быть "/admin/profile/index.cshtml", представление, который перечислены существующие профили, в этом случае вам не нужно определять контроллер в @ActionLink
как то @ActionLink
уже относительно ProfileController
, Так что ваши @ActionLink
может быть
@Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" })
я использовал null
вместо new{}
Как отмеченный ответ, я думаю, что это более уместно. Перегрузки ActionLink не являются наиболее простыми вещью.