我正在使用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};