Маршрутизация от View до бритвенной страницы Asp.Net Core 3 - PullRequest
1 голос
/ 30 октября 2019

У меня есть страница UnderConstruction, которая обрабатывается MVC. Представление имеет следующий код для маршрутизации пользователя после ввода его адреса электронной почты на страницу регистрации, которая является частью области бритвы для идентификации. Намерение состоит в том, чтобы открыть страницу регистрации с ее электронной почтой, уже заполненной в поле ввода электронной почты.

<!-- route to Register Form -->
<form class="form-inline push-10"   method="get">
   <div class="form-group">
      <label class="sr-only text-white" asp-for="Email">Email Address</label>
      <input class="form-control" type="email" asp-for="Email" placeholder="Your Email..">
  </div>
  <div class="form-group">
     <button class="btn btn-default" type="submit" asp-area="Identity" asp-page="/Account/Register" asp-page-handler="WithEmail">
       <i class="fa fa-plus"></i> Register
    </button>
  </div>
  <div class="form-group">
     <a class="btn btn-default" asp-controller="Home" asp-action="Index">
        <i class="fa fa-home"></i> Home
     </a>
  </div>

и моделью просмотра страниц

 public class UnderConstructionViewModel
{
    public string Email { get; set; }
}

Нажатием кнопки Регистрация послепри вводе адреса электронной почты будет получен этот URL

https://localhost:44367/Identity/Account/Register?Email=testemail@mydomain.com

. Вы попадете на страницу регистрации с адресом электронной почты, НЕ заполненным в поле ввода электронной почты.

Вот метод в register.cshtml.cs (защищенная область для идентификации)

public IActionResult OnGetWithEmail(string email)
{
   return RedirectToPage("Register", new InputModel{ Email = email });
}

Проблема в том, что метод никогда не попадет в цель. Обработчик придерживается соглашения, а модель следует соглашению, поэтому я не уверен, почему метод не получает попадания.

Я также пробовал помощники asp-tag в вызове формы, но это выдает то же самое. результат.

Буду признателен за любую помощь в этом.

1 Ответ

0 голосов
/ 30 октября 2019

Любые значения строки запроса, которые добавляются к атрибуту action формы, или в этом случае атрибут formaction стираются системой маршрутизации при отправке формы. Это выглядит так: https://github.com/aspnet/Mvc/issues/8621

Вы можете решить эту проблему, добавив "{handler?}" к директиве @page на странице регистрации. Затем имя обработчика добавляется к URL-адресу как сегмент, а не как значение строки запроса.

...