我通过MVC中的Web API调用在角度js接口上显示结果。
但是,根据一些选择,我需要传递一些参数并调用以下MVC Controller方法来下载文件。
public ActionResult Downloadfile(string selectedIds, string selecteddefs, DateTime date)
{
// do some stuff here
var file = new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
{
FileDownloadName = string.Format("download_{0}.docx", DateTime.Now.ToString("ddMMyyyyHHmmss"))
};
return file;
}
这是一个普通的MVC控制器,它不会从ApiController继承。如果我在angular函数中创建如下所示的http帖子,它不会下载文件,因为它会触及控制器方法。这可能是,它返回的是json数据而不是 下载一个文件。我不应该这样做,因为Controller是普通的MVC,不会继承ApiController。
$http.post('/ControllerName/MethodName?selectedIds=' + selectedIds + '&selecteddefs=' + selecteddefs + '&date=' + date, {});
所以我尝试了下面的普通jquery。
$.ajax({
url: "/ControllerName/ActionName",
data: { 'selectedIds': selectedIds.toString(), 'selecteddefs': selecteddefs.toString(), 'date': date },
type: "POST"
});
以上命中Controller方法并完成所有工作,但再次无法下载任何文件。
如何调用普通的MVC Controller Action方法,该方法的功能只是下载文件。 Action方法没有问题。有人可以帮忙。
我已尝试过以下操作。但它没有点击控制器操作。
$http({
method: 'POST',
url: '/Controller/ActionName',
data: $httpParamSerializerJQLike({ nodeIds: JSON.stringify(nodes.toString()), glossaryTermIds: JSON.stringify(glossaryterms.toString()), date: JSON.stringify(date.toString()) }),
headers: { 'Content-Type' : 'application/x-www-form-urlencoded'}
})
.then(function (result){
}, function (result) {
});
答案 0 :(得分:3)
不需要复杂的帖子,使用角度窗口对象而不是位置对象:
$window.location.assign("/ControllerName/ActionName");
答案 1 :(得分:0)
使用angularJS的$ resource服务来创建http请求
$resource('host/ControllerName/ActionName').get();
你也可以传递参数。
答案 2 :(得分:0)
将AngularJs与C#一起使用时,这是一个很常见的错误。我不久前浪费了一些时间。
您必须使用$ httpParamSerializerJQLike作为依赖项,示例请求应如下所示:
original_image = original_image.crop((25, 25, 50, 50))
AngularJs默认使用'application / json'作为Content-Type。
答案 3 :(得分:0)
使用AngularJS调用ASP.Net MVC Controller操作方法非常简单,如下所示:
在Javascript中我写道:
var app = angular.module('MyApp', []);
angular.module('MyApp', [])
.controller('MyController', ['$scope', '$http', function ($scope,
$http) {
$scope.search = function () {
$http({
method: "GET",
url: "/home/GetData"
}).then(function mySuccess(response) {
$scope.name = response.data;
}, function myError(response) {
$scope.name = response.statusText;
});
}
}]);
在HTML部分,我写道:
<button ng-click="search()">Get Data</button>
在Controller Action中,我写道:
return Json("You caught AngularJS", JsonRequestBehavior.AllowGet);