为什么PartialAsync不调用coresponding控制器方法?

时间:2019-04-24 21:30:50

标签: c# asp.net-core razor asp.net-core-mvc

我有一个.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 个答案:

答案 0 :(得分:3)

@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 })