В моем проекте ASP.NET Core 2.1 я заметил, что мои Html.ActionLinks
и Html.Actions
, которые не имеют установленного id
, автоматически включают id
из текущего URL.
Например, учитывая следующее Html.ActionLink
в представлении:
<li>@Html.ActionLink("Apply Online", "Apply-Online", "Careers")</li>
Если URL-адрес текущей страницы равен localhost:1234/careers/apply-online/53
, то при проверке href
выше Html.ActionLink
в моей навигации, он включает «53» в сгенерированном URL (даже если он не был установлен в моем представлении).
Я могу предотвратить это, если я явно установлю id
ни к чему, как это:
<li>@Html.ActionLink("Apply Online", "Apply-Online", "Careers", new { id = "" })</li>
Однако есть ли способ остановить это по всем направлениям без необходимости обновлять все мои ссылки действий?
У меня странное поведение,где, если два контроллера имеют одинаковое имя действия (например, Index
), а URL-адрес одного из них имеет id
, он добавляет тот же id
ко всем другим действиям с совпадающим именем на странице.
Вот мой маршрут в Startup.cs
:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
ОБНОВЛЕНИЕ
Согласно документации , это выглядит как AmbientValues
, который вызывает это поведение:
Второй параметр конструктора VirtualPathContext - это столбецлекция окружающих ценностей.Значения окружения обеспечивают удобство, ограничивая количество значений, которые разработчик должен указать в определенном контексте запроса.Текущие значения маршрута текущего запроса считаются окружающими значениями для генерации канала.В приложении ASP.NET Core MVC, если вы находитесь в действии «О» HomeController, вам не нужно указывать значение маршрута контроллера для связи с действием «Индекс» - используется окружающее значение Home.
Окружающие значения, которые не соответствуют параметру, игнорируются, и окружающие значения также игнорируются, когда явно предоставленное значение переопределяет его, переходя слева направо в URL.
Так что это, кажется, объясняетпочему, я могу предотвратить автоматическую установку id
, если я явно установлю ее на { id = "" }
в моем Html.ActionLink
.
Мой вопрос, есть ли способ установить id
, чтобы не использоватьзначения окружения по умолчанию, возможно, у меня MapRoute
?И используйте id
только если ему явно задано значение в Action
или ActionLink
?