ASP.NET Core 2: как RedirectToPage с областью?

RedirectToPage("Companies") перенаправит на /Pages/Companies.cshtml (из контроллера ASP.NET MVC)

Но что, если хотите перенаправить на эту страницу /Areas/MyArea/Pages/Companies.cshtml?

Все эти и многие другие не работают:

RedirectToPage("/MyArea/Companies.cshtml") 
RedirectToPage("MyArea/Companies.cshtml") 
RedirectToPage("./MyArea/Companies.cshtml") 
RedirectToPage("/MyArea/Companies") 
RedirectToPage("MyArea/Companies") 
RedirectToPage("./MyArea/Companies") 

Иногда я получаю ошибку «Страница не найдена». Иногда получают: «Укажите относительный путь корня с начальным символом '/' для создания URL-адреса вне страницы Razor». Нет папки Pages. Я знаю, что все это может снова изменить все правила.

P.S. Страницы Razor, настроенные с помощью простого .SetCompatibilityVersion (CompatibilityVersion.Version/Pages/Companies.cshtml1); никакой конкретной маршрутизации не добавлено.


person Roman Pokrovskij    schedule 31.08.2018    source источник


Ответы (2)


Используйте перегрузку RedirectToPage, которая принимает объект, представляющий RouteValues ​​:

return RedirectToPage("/Companies", new { area = "MyArea" });

Обратите внимание, что '/' требуется, если вы используете RedirectToPage в контроллере (или где-нибудь за пределами страницы Razor). В противном случае это не требуется (но все равно будет работать).

person Mike Brind    schedule 31.08.2018
comment
Странно, но это тоже не работает. Должен ли я добавить маршрутизацию в AddRazorPagesOptions? - person Roman Pokrovskij; 31.08.2018
comment
В папке моего проекта нет папки Pages. - person Roman Pokrovskij; 31.08.2018
comment
Также у меня есть стандартная область идентификации. RedirectToPage (Account / AccessDenied, new {area = Identity}); тоже не работает. С той же ошибкой: укажите относительный путь корня с начальным символом '/' для создания URL-адреса вне страницы Razor. - person Roman Pokrovskij; 31.08.2018
comment
Интересно. У меня он отлично работает без символа «/», как с папкой Pages, так и без нее. Я подозреваю, что разница в том, что вы работаете в контроллере MVC, тогда как мои тесты выполняются из метода обработчика страниц Razor. - person Mike Brind; 31.08.2018
comment
Да, сообщение об ошибке ясное. RedirectToPage нуждается в косой черте, если вы используете ее вне страницы Razor (например, в контроллере MVC). Я обновлю свой ответ соответственно. - person Mike Brind; 31.08.2018

Это работает для меня:

return RedirectToPage("/Companies", new { area = "MyArea" });

Работает под обычным .SetCompatibilityVersion(CompatibilityVersion.Version_2_1); без специальной маршрутизации.

Думаю, это будет популярный вопрос ... Благодаря Майку Брингу, он указал мне путь.

P.S. Если у вас есть папка Pages - все правила будут изменены еще раз. Так «Razor Pages» пытаются убежать от «магии MVC»

person Roman Pokrovskij    schedule 31.08.2018