Razor actionlink автогенерации? Длина = 7 в URL? - PullRequest
55 голосов
/ 05 декабря 2010

У меня есть ссылка ниже на странице бритвы:

@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.Почему это автоматически генерируется?

Ответы [ 3 ]

88 голосов
/ 05 декабря 2010

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

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

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"})
7 голосов
/ 05 декабря 2010

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

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

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

0 голосов
/ 07 декабря 2016

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

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

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

...