我正在从使用 angularJS 的服务调用 ASP.Net MVC Controller :
$http({
method: "get",
url: "ControllerMethod",
params: {
param1: param1Value,
pageNumber: pageNumber,
pageSize: pageSize,
filter: filter
}
}).success(function (data) {
callback(data);
}).error(function () {
alert("Error.");
});
Controller 签名是:
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)
并将过滤器的各个参数名称扁平化到参数 so..
params: angular.extend({
param1: paramValue,
pageNumber: pageNumber,
pageSize: pageSize,
},filter)
我假设 var filter = {paramA:1,paramB:2,paramC:3};
关于c# - "filter"是 Angular、Javascript 还是 ASP.Net MVC 中的保留字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20960876/