Не удается получить маршрут страницы бритвы для работы с помощью помощника тега привязки - PullRequest
0 голосов
/ 17 февраля 2020

Справочная информация

Это продолжение вопроса , который я задал около asp. net core v3.1.

Я добавил следующее к автозагрузке, как было предложено в решении здесь , что позволило мне перенаправить на страницу бритвы обоими способами:

services.AddMvc()
        .AddRazorPagesOptions(options => 
                 options.Conventions.AddAreaPageRoute("Identity", "/account/signupandapply", "/identity/account/signup")
        );
/identity/account/signup
/identity/account/signupandapply/<fooapplyid>

Issue

Я пытаюсь использовать помощник тега привязки для соблюдения пути маршрута /identity/account/signupandapply/<fooapplyid>. Href показывает использование параметра вместо /identity/account/signupandapply?fooapplyid=<fooapplyid>. Это моя разметка помощника тега:

<a asp-area="identity" asp-page="/account/signupandapply" asp-route-fooapplyid="@Model.FooApplyId">Apply here</a>

В настоящее время я вручную устанавливаю href, но хотел бы знать, как заставить это работать, используя помощник тега.

<a href="/identity/account/signupandapply/@Model.FooApplyId">Apply here</a>

Примечание: Разметка привязки добавляется к виду за пределами области идентификации.

Попытка

Я пытался добавить ниже, который показывает HREF, как я хочу. Т.е. /identity/account/signupandapply/<fooapplyid>

.AddAreaPageRoute("Identity", "/account/signupandapply", "/identity/account/signupandapply/{applyid}")

Но тогда я получаю ошибку, когда я go на странице, что имеет смысл

AmbiguousMatchException: The request matched multiple endpoints. Matches: /Account/SignUpAndApply /Account/SignUpAndApply

Ни одна из этих работ, href по-прежнему показывает как ? applyid =:

.AddAreaPageRoute("Identity", "/account/signupandapply?applyid=", "/identity/account/signupandapply/{applyid}")

.AddAreaPageRoute("Identity", "/account/signupandapply/{applyid?}", "/identity/account/signupandapply/{applyid}")

Вопрос

Существует ли дополнительный маршрут запуска, который необходимо определить, или как я могу получить помощник тега привязки для соблюдения маршрута?

1 Ответ

1 голос
/ 17 февраля 2020
AddAreaPageRoute("Identity", "/account/signupandapply", "/identity/account/signup")

Чтобы процитировать документы по этому (выделено мое):

conventions.AddAreaPageRoute(string areaName, string pageName, string route)

Добавляет указанный route на страницу в указанном pageName, расположенном в указанной области.

Страница может быть перенаправлена ​​через route в дополнение к стандартному набору маршрутов на основе маршрута. Все ссылки, сгенерированные для этой страницы, будут использовать указанный маршрут.

Таким образом, это соглашение фактически предписывает маршрутизации использовать маршрут /identity/acount/signup с этого момента для генерации всех ссылок, в то время как Принятие входящих маршрутов для достижения обоих этих маршрутов.

К сожалению, я не думаю, что вы можете лучше контролировать это, используя соглашения страниц. Бритвенные страницы не совсем соответствуют модели маршрутизации, когда у вас есть другой маршрут для достижения одной и той же страницы. В конце концов, страницы Razor - это page-centri c вместо route-centri c, например MVC actions.

Так что если это сложное требование для вас, вы можете хочу взглянуть на использование контроллера для этого варианта использования вместо этого, который отображает то же представление. Несмотря на это, контроллеры прекрасно сочетаются с приложением, которое в противном случае использует страницы Razor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...