我有一个.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)
该视图按我的意愿显示,但是控制器中的方法从未被调用,因此部分视图无法获取想要通过控制器方法获取的所需数据。
为什么会这样?
我该如何使其按需工作?
答案 0 :(得分:3)
@await Html.PartialAsync("CountView", Model)
渲染一个局部视图,它不为此调用任何控制器。在ASP.NET Core中执行此操作的正确方法是创建一个View Component。
关于实现,这是从先前链接的官方文档中修改的一个简单示例:
ViewComponents
文件夹public class CounterViewComponent: ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(MyModel model)
{
// magic here
return View(model);
}
}
@await Component.InvokeAsync("Counter", new { model = Model })