Как получить доступ к URL с помощью пользовательского шаблона маршрута?

#c# #asp.net-core #razor #routes #asp.net-core-mvc

#c# #asp.net-core #бритва #маршруты #asp.net-core-mvc

Вопрос:

Я установил свой шаблон на это:

 endpoints.MapControllerRoute(
            //name: "default",
            //pattern: "{controller=Home}/{action=Index}/{id?}");
            name: "custom",
            pattern: "{company?}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
 

Когда я получаю доступ к URL-адресу в браузере, https://localhost:44387/123/Users страница будет успешно отображаться, и значение 123 будет успешно восстановлено в контроллере:

 public IActionResult Index(string company)
{
    //code here
}
 

Как я могу получить доступ к этому через razor? перед тем, как я обновил шаблон, я использую только значение по умолчанию, подобное этому коду

 <li class="nav-item">
    <a class="nav-link text-dark" asp-area="" asp-controller="123/Users" asp-action="Index">User</a>
</li>
<li class="nav-item">
    <a class="nav-link text-dark" asp-area="" asp-controller="Clients" asp-action="Index">Client</a>
</li>
 

Я попытался добавить 123 к asp-controller , но это не сработало.
Чего мне здесь не хватает?
Спасибо!

Комментарии:

1. Являются <li> ли теги в вашем вопросе фрагментом Index.cshtml Users контроллера? Если ДА, просто удалите 123 : use asp-controller="Users" .

2. @Jackdaw, если я удалю это, ничего не произойдет. страница просто перезагрузится

3. Но что, как вы ожидаете, произойдет, когда вы нажмете на эту ссылку asp-controller="123/Users" asp-action="Index" ? Вы уже находитесь в Index поле зрения контроллера Users . Какая в этом польза?

4. @Jackdaw, когда пользователь нажимает на эту кнопку, он переходит к like localhost:44387/123/Users , но 123 — это просто фиктивные данные, планирующие понравиться какому-то CompanyName после того, как я найду решение, отобразит индекс пользователей,

Ответ №1:

Вы можете использовать:

 <li class="nav-item">
    <a class="nav-link text-dark" href="123UsersIndex">User</a> 
</li>
 

Или используйте вспомогательный метод HTML:

 <li class="nav-item">
    @Html.ActionLink("Users", "Index", "Users", routeValues: new { company = "123" }, htmlAttributes: new { @class= "nav-link text-dark" })
</li>
 

Для получения дополнительной информации см. htmlhelperlink Extensions .Метод ActionLink

Комментарии:

1. привет, сэр, это работает, но URL-адрес отличается localhost:44387/Users?company =123

2. мой плохой сэр, он работает! я просто забыл раскомментировать пользовательский код. Спасибо!