Подтвердить что ты не робот

Razor actionlink автогенерирует? Length = 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

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

4b9b3361

Ответ 1

ActionLink override вы используете совпадения с (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"})

Ответ 2

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

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

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

Ответ 3

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

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

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