0

我的控制器中有一个方法(SurfaceController,它是一个特定的 Umbraco 控制器):

public class ProductListController : SurfaceController
{
    public ActionResult GetCategoryProducts([ModelBinder(typeof(IntArrayModelBinder))] int[] categoryIds, int page = 1, int pageSize = 10)
    {
        int total = 0;
        var products = ProductService.GetCategoryProducts(categoryIds, page, pageSize, out total);

        return View("/Views/PartialView/ProductList.cshtml", products);
    }
}

然后我有以下 ModelBinder,因此我可以创建类似“?categoryIds=1,2,3,4,5”的请求,而不是默认行为“?categoryIds=1&categoryIds=2&categoryIds=3&categoryIds=4&categoryIds=5”。

public class IntArrayModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (value == null || string.IsNullOrEmpty(value.AttemptedValue))
        {
            return null;
        }

        return value
            .AttemptedValue
            .Split(',')
            .Select(int.Parse)
            .ToArray();
    }
}

这也意味着当我将 int[] 作为参数发送到 RenderAction 时它不起作用,但是当将值连接到逗号分隔的字符串时它起作用。

@{ Html.RenderAction("GetCategoryProducts", "ProductList", new { categoryIds =  new int[] { 1, 2, 3, 4, 5 }, pageSize = 50 }); }

@{ Html.RenderAction("GetCategoryProducts", "ProductList", new { categoryIds = string.Join(",", new int[] { 1, 2, 3, 4, 5 }), pageSize = 50 }); }

我能否以某种方式使其同时使用 int[] 和字符串(每个逗号拆分为 int 数组),除了将 GetCategoryProducts 中的“categoryIds”参数更改为字符串,然后在此方法中将字符串拆分为 int 数组。

我想是否可以保留签名 GetCategoryProducts 方法。

4

0 回答 0