Почему PartialAsync не вызывает метод контроллера ядра? - PullRequest
1 голос
/ 25 апреля 2019

У меня есть приложение .NET Core 2.1 MVC.

У меня есть контроллер Home, который выглядит следующим образом:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    public IActionResult CountView(MyModel model)
    {
        ...
        return PartialView(model);
    }
}

В индексном представлении я хочу отобразить внутренний вид с именем CountView.

Но когда я использую следующий метод в Index.cshtml:

@await Html.PartialAsync("CountView", Model)

представление отображается так, как я хотел, но метод в контроллере никогда не вызывается, и, таким образом, частичное представление не получает необходимые ему данные, предназначенные для извлечения методом контроллера.

Почему это так?

А как мне заставить его работать так, как нужно?

1 Ответ

3 голосов
/ 25 апреля 2019
@await Html.PartialAsync("CountView", Model)

Визуализирует частичное представление, для этого не требуется никакого контроллера. Правильный способ сделать это в ASP.NET Core - создать View Component .

Что касается реализации, вот простой пример, модифицированный по сравнению с официальной документацией, ранее связанной:

  1. Создание папки ViewComponents в корне проекта
  2. Внутри него создайте класс `` CounterViewComponent`:
public class CounterViewComponent: ViewComponent
{
    public async Task<IViewComponentResult> InvokeAsync(MyModel model)
    {
        // magic here
        return View(model);
    }
}
  1. Назовите это по вашему мнению:
@await Component.InvokeAsync("Counter", new { model = Model })
...