在 ASP.NET MVC 中将多个参数传递给 ViewComponent

Pass multiple parameters to ViewComponent in ASP.NET MVC

我想使用 C# 将多个参数传递给 ASP.NET MVC 中的视图组件。

所以我这样做了:

public IViewComponentResult Invoke(Ordering ordering, InvokeRequest invokeRequest)
{
    var productList = _context.GetProductForSiteService
                              .Execute(invokeRequest.ordering, invokeRequest.Searchkey, invokeRequest.page, invokeRequest.pageSize, null).Data;
     
    return View(viewName: "GetProducts", productList);
}

public class InvokeRequest
{
    public Ordering ordering { get; set; }
    public string Searchkey { get; set; }
    public int page { get; set; } = 1;
    public int pageSize { get; set; } = 20;
}

在视图中,我有:

 @await Component.InvokeAsync("GetProducts", new  { Ordering=Ordering.NotOrder, Searchkey="", page=1, pageSize=20 })

但是 Invoke 方法中 InvokeRequest 的值始终为空,如何将多个参数传递给 ViewComponent?

您传递的对象的属性与您的 Invoke 方法签名不匹配。
来自 documentation

An Object with properties representing arguments to be passed to the invoked view component method.

要传递的对象需要属性 orderinginvokeRequest

@await Component.InvokeAsync("GetProducts", 
    new { 
        ordering = Ordering.NotOrder, 
        invokeRequest = new InvokeRequest { ordering = Ordering.NotOrder, Searchkey = "", page = 1, pageSize = 20 }
    })

由于 InvokeRequest 还包含一个 ordering 属性,您可能会考虑将其排除在组件 Invoke 方法签名之外。

public IViewComponentResult Invoke(InvokeRequest invokeRequest)

调用看起来会像

@await Component.InvokeAsync("GetProducts", 
    new InvokeRequest { ordering = Ordering.NotOrder, Searchkey = "", page = 1, pageSize = 20 }
    )