Запретить автоматическую передачу параметра URL в Razor Pages - PullRequest
0 голосов
/ 07 октября 2018

Я использую формат .NET Core 2 "Razor Pages" для веб-приложения.Это позволяет вам определить, как сопоставить URL-адрес с именами переменных с помощью простой директивы вверху:

@page "{personId:int?}"

. Вышеприведенный пример, например, отображает URL-адрес /Person/Index/123 на функцию IndexModel.OnGetAsync(int personId), такчто personId будет иметь значение 123.

Однако я заметил, что эти значения автоматически добавляются к любому URL-адресу, которым они могут быть, если на странице существует ссылка.Если я добавлю следующее на страницу указателя:

<a asp-page="/Person/Details">Details</a>

… фактический сгенерированный HTML-код будет выглядеть следующим образом:

<a href="/Person/Details/123">Details</a>

… это означает, что и на страницах указателя, и на странице сведений есть одна и та же директивавверху между ними неявно передается значение personId.

Есть ли способ предотвратить это, так что asp-page="/Person/Details" просто перенаправит на страницу сведений без какого-либо значения, переданного для personId

1 Ответ

0 голосов
/ 08 октября 2018

Для Asp.Net Core текущие значения маршрута текущего запроса считаются окружающими значениями для генерации канала.

Для вашего сценария 123 для personId будет использоваться повторно для генерации ссылки <a asp-page="/Person/Details">Details</a>.

Из этого процесса генерации URL вы можете попытаться удалить значение из RouteData

        public async Task OnGetAsync(int? personId)
    {
        Person = await _context.Person.ToListAsync();
        RouteData.Values.Remove("personId");
    }

В другом более эффективном способе вы можете попробовать удалить значение из генерации URL.

<a asp-page="/Person/Details" asp-route-personId="">Details</a>
...