如何从角度js调用MVC Controller Action方法

时间:2015-12-07 21:11:50

标签: javascript angularjs asp.net-mvc

我通过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) {
        });

4 个答案:

答案 0 :(得分:3)

不需要复杂的帖子,使用角度窗口对象而不是位置对象:

$window.location.assign("/ControllerName/ActionName");

答案 1 :(得分:0)

使用angularJS的$ resource服务来创建http请求

$resource('host/ControllerName/ActionName').get();

你也可以传递参数。

Follow this link

答案 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);