Как создать несколько URL в одном контроллере .NET Core - PullRequest
1 голос
/ 19 июня 2019

Я работаю с ядром ASP .NET, и у меня есть проблемы.

У меня есть 3 страницы, которые можно создать в одном контроллере, но для этих страниц у меня должен быть только один контроллер , и в этом контроллере у меня должна быть функция, которая создаст отдельный URL для этого 3 страницы .

Например:

*http://mydomain/page/*Home, Загрузить, Блог;

Для этого мне нужна навигация, но у меня будет тот же HTML-файл только изменит данные с модели.

Таким образом, у меня будет 3 кнопки навигации, которые будут перемещать пользователя по той же странице , но другому контенту, который я получу от модели, и от контроллера мне просто нужно изменить URL страницы.

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

Вы не хотите повторять HTML?Используйте один вид.И тогда у вас может быть контроллер, подобный этому фрагменту:

class PagesController : Controller
{
    [HttpGet("about")]
    public IActionResult About() => View("MyCommonView", yourModel); // get the model from wherever you plan to

    [HttpGet("contact")]
    public IActionResult Contact() => View("MyCommonView", yourModel);

    [HttpGet("whateverelse")]
    public IActionResult WhateverElse() => View("MyCommonView", yourModel);
}

Можно просто выполнить одно действие, но я бы этого не делал.Вместо этого я бы использовал отдельные представления для каждого действия и поместил разметку, которая является общей для файла макета трех действий.Это придаст различным действиям большую гибкость.

1 голос
/ 19 июня 2019

Один из способов - украсить ваше действие атрибутом Route:

[Route("page")]
public class PagesController : Controller
{
    // you may also use [HttpGet("{pageName}", Name = "PagePath")] instead,
    // to explicitly match HTTP GET requests
    [Route("{pageName}", Name = "PagePath")]
    public IActionResult GetPage(string pageName)
    {
        switch(pageName?.ToLower())
        {
            case "home":
                return View("Page", homeModel);
            case "home":
                return View("Load", loadModel);
            case "home":
                return View("Blog", blogModel);
            default:
                return NotFound();
        }
    }
}

Теперь вы можете создать свое представление на Views/Pages/Page.cshtml и сгенерировать ссылки с помощниками:

@Url.RouteUrl("PagePath", new { pageName = "Home" }) <!-- will produce "/page/Home" string -->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...