c# – 在Angular,Javascript或ASP.Net MVC中“过滤”一个保留字吗?

我正在使用angularJS向ASP.Net MVC控制器进行此调用:

$http({
    method: "get",
    url: "ControllerMethod",
    params: {
        param1: param1Value,
        pageNumber:  pageNumber,
        pageSize: pageSize,
        filter: filter
    }
}).success(function (data) {
    callback(data);
}).error(function () {
    alert("Error.");
});

控制器签名是:

public ActionResult GetAssetDepreciationList(
     int pageNumber, int pageSize, int param1, MyFilterType filter)

如图所示运行时,“filter”参数始终为null.我有许多类似的方法可以正常工作.

当我改变时:

 filter: filter

至:

anythingElse : filter

它按预期工作. “过滤”是一个保留字吗?如果是这样,对于哪个框架(MVC,Javascript或angular)?

最佳答案 看起来您的过滤器是复杂类型MyFilterType看看
this

您可能需要创建自定义解析器.如果你想避免这种情况你也可以保留模型(即如果MyFilterType是POCO)并将过滤器(作为JSON)传递给请求的主体.

此外,如果您的过滤器如此复杂,我建议OData.由于您已经在使用.NET,因此它的简单Nuget包可以使您的查询,标准化和解析器已经存在,而且它是可配置的,可以直接应用于IQueryable.

一些更有用的信息可能是..什么是MyFilterType以及实际存在的数据:filter.

更新:

有趣的问题我认为它与查询字符串和模型解析有关…我能够通过以下方式让它工作:(需要System.Web.Http)

 public ActionResult GetAssetDepreciationList(
      int pageNumber, int pageSize, int param1, [FromUri] MyFilterType filter)

并将过滤器的各个参数名称展平到params上.

params: angular.extend({
                           param1: paramValue,
                           pageNumber: pageNumber,
                           pageSize: pageSize,
                        },filter)

我假设var filter = {paramA:1,paramB:2,paramC:3};

点赞