如何将参数从MVC Controller传递给Angular

时间:2015-11-24 16:01:28

标签: angularjs asp.net-mvc

我在MVC项目中使用Angular。要更改视图,我将URL传递给我的Angular控制器,如下所示:

在我的角度模块中:

var app = angular.module('myModule', ['ui.bootstrap', 'checklist-model', 'ngAnimate', 'ngTouch', 'ui.grid', 'ui.grid.pagination', 'ui.grid.selection', 'ui.grid.exporter', 'ui.grid.autoResize', 'ngRoute'])

在我的MVC控制器中:

public ActionResult Index()
        {
            ConfigureDefaultLayout();


            return View("ContractorOperatorView");

            //return PartialView("_ScoringSetOverride");
        }

        public ActionResult GetContractorPage(int companyId, string currentStatus)
        {   
            contractorId = companyId;
            ReleaseStatus = currentStatus;
            string newUrl = "/SSQV4/SSQV5/Contractor/Index";
            return Json(newUrl, JsonRequestBehavior.AllowGet);
        }

然后在我的角度控制器中:

$scope.rowDblClick = function (row) {
    generalsearchService.goToContractorPage(row.entity.CompanyID, row.entity.ReleaseStatus)
    .success(function (data) {
        $window.location.href = data;
    })

};

在我的Angular服务中 -

this.goToContractorPage = function (id, status) {
    return $http.post('/SSQV4/SSQV5/Contractor/GetContractorPage', { "companyId": id, "currentStatus": status })
};

一切正常,因为我正在制作"承包商ID"在我的MVC控制器中静态,但这导致功能问题。我需要将contractorId和URL一起传递给我的Angular控制器,但我不知道如何。我试过这个:

在我的MVC控制器中 -

 string newUrl = "/SSQV4/SSQV5/Contractor/Index?id=" + contractorId;

然后在我的Angular控制器中 -

$scope.contractorid = $routeParams.id;

我收到错误" routeParams未定义"。我知道必须有某种方法可以做到这一点,但我对此无能为力。有很多关于将参数从Angular传递给MVC的信息,但反之则不多。

非常感谢任何帮助!

我尝试将它放在我的app.js中:

var app = angular.module('myModule', ['ui.bootstrap', 'checklist-model', 'ngAnimate', 'ngTouch', 'ui.grid', 'ui.grid.pagination', 'ui.grid.selection', 'ui.grid.exporter', 'ui.grid.autoResize', 'ui-router'])
$stateProvider.state('contractor', {
    url: '/Contractor?contractorId',
    params: {
        contractorId: {
            value: null,
            squash: true
        }
    }
});

现在我得到" $ stateProvider未定义"错误。

2 个答案:

答案 0 :(得分:0)

假设您使用ui-router Angular模块,您需要在州定义中定义参数:

  $stateProvider.state('contractor', {
    url: '/contractor?contractorId',
    params: {
      contractorId: {
        value: null,
        squash: true
      }
    }
  });

然后你需要在使用之前将$ routeParams注入你的控制器。

答案 1 :(得分:0)

在你的app.js文件中,确保添加一个有参数的路由。 Check out here.

  

通常,URL都有动态部分,称为参数。有几个选项可用于指定参数。基本参数如下所示:

$stateProvider
.state('contacts.detail', {
    url: "/contacts/:contactId",
    templateUrl: 'contacts.detail.html',
    controller: function ($stateParams) {
        // If we got here from a url of /contacts/42
        expect($stateParams).toBe({contactId: "42"});
    }
})
  

或者你也可以使用花括号:

// identical to previous example
url: "/contacts/{contactId}" 
  

示例:

     

'/ hello /' - 仅当路径正好是'/ hello /'时匹配。尾部斜杠没有特殊处理方式,模式必须匹配整个路径,而不仅仅是前缀。

     

'/ user /:id' - 匹配'/ user / bob'或'/ user / 1234 !!!'甚至'/ user /'但不是'/ user'或'/ user / bob / details'。第二个路径段将被捕获为参数“id”。

     

'/ user / {id}' - 与上一个示例相同,但使用大括号语法。

     

'/ user / {id:int}' - param被解释为Integer。

我希望它有用。