Javascript 使用ASP.NET MVC路由参数在angular js controller中显示未定义

Javascript 使用ASP.NET MVC路由参数在angular js controller中显示未定义,javascript,angularjs,asp.net-mvc,asp.net-mvc-4,Javascript,Angularjs,Asp.net Mvc,Asp.net Mvc 4,这是我使用asp.net MVC路由的Url http://localhost:23293/Exam?id=1 我想访问angular js控制器中的id参数 aoeapp.controller('ExamController', function ($scope, examservice, $routeParams) { $scope.exams = []; $scope.id = $routeParams.id; alert($scope.id); $scope.getAllexams =

这是我使用asp.net MVC路由的Url

http://localhost:23293/Exam?id=1
我想访问angular js控制器中的id参数

aoeapp.controller('ExamController', function ($scope, examservice, $routeParams) {
$scope.exams = [];
$scope.id = $routeParams.id;
alert($scope.id);
$scope.getAllexams = function (id) {

    examservice.getExamMaster(id).success(function (data) {
        $scope.exams = data;
    }).error(function (data, status, Xhr) {

        alert(Xhr);
    });
};
$scope.getAllexams(id);
});
所以这里$scope.id显示未定义

我的mvc路由只是默认路由

编辑 角路线

aoeapp.config(function ($routeProvider) { 
    $routeProvider.when('/', { 
        controller: 'HomeController', 
        templateUrl: 'Pages/Home.html' 
    }).when('/Exam/:id', { 
        controller: 'ExamController', 
        templateUrl: 'Pages/Exam.html' 
    }).when('/Test/:id', { 
        controller: 'TestController', 
        templateUrl: 'Pages/Test.html' 
    }).otherwise({ redirectTo: '/' }); 
});

我有一个类似的问题,我的角度路由路由到我的MVC控制器。我使用了一个catchall路线修复了它:

将此路线添加到您的
应用程序启动/RouteConfig.cs

routes.MapMvcAttributeRoutes();
routes.MapRoute(
    name: "Angular",
    url: "Exam/{*url}",
    defaults: new {controller = "Angular", action = "Index" }
);
控制器/AngularController.cs
文件中执行以下操作:

[Route("Exam/{*url}")]
public ActionResult Index()
{
    return View();
}

这将拦截对
/Exam
的所有调用,并将它们重定向到您的路由器。您可能需要使用
路由
属性名称播放一段视频。

我也遇到了类似的问题,我的角度路由被路由到MVC控制器。我使用了一个catchall路线修复了它:

将此路线添加到您的
应用程序启动/RouteConfig.cs

routes.MapMvcAttributeRoutes();
routes.MapRoute(
    name: "Angular",
    url: "Exam/{*url}",
    defaults: new {controller = "Angular", action = "Index" }
);
控制器/AngularController.cs
文件中执行以下操作:

[Route("Exam/{*url}")]
public ActionResult Index()
{
    return View();
}

这将拦截对
/Exam
的所有调用,并将它们重定向到您的路由器。您可能需要使用
路由
属性名播放一段音乐。

我用另一种方法解决了这个问题。我创建了一个
ViewBag
变量来存储查询字符串或id,您也可以使用
模型
,然后将其传递到角度方法中。通过阅读以下代码,您可以更清楚地理解这一点:

剃须刀视图

<form name="ExamForm" ng-init="$scope.setQueryStringToScopeId(@ViewBag.Id)">
    ....
</form>
MVC控制器

aoeapp.controller('ExamController', function ($scope, examservice) {

    $scope.id = 0;
    $scope.setQueryStringToScopeId = function(id) {
        $scope.id = id;
    };
    ....
});
public ActionResult Exam()
{
    ViewBag.Id = Request.QueryString["Id"];
    return View();
}

您还可以在
Razor视图中直接使用查询字符串。让我知道这是否适合您。

我用不同的方法解决了这个问题。我创建了一个
ViewBag
变量来存储查询字符串或id,您也可以使用
模型
,然后将其传递到角度方法中。通过阅读以下代码,您可以更清楚地理解这一点:

剃须刀视图

<form name="ExamForm" ng-init="$scope.setQueryStringToScopeId(@ViewBag.Id)">
    ....
</form>
MVC控制器

aoeapp.controller('ExamController', function ($scope, examservice) {

    $scope.id = 0;
    $scope.setQueryStringToScopeId = function(id) {
        $scope.id = id;
    };
    ....
});
public ActionResult Exam()
{
    ViewBag.Id = Request.QueryString["Id"];
    return View();
}

您还可以在
Razor视图中直接使用查询字符串。让我知道这是否适合您。

Angular不关心您的服务器端路由。你的角路由是什么?好的,但是如果我使用角路由,它与MVC路由冲突,并且它不工作,你可以在两侧使用路由,但是你的角应用程序只关心角路由。将角度路由添加到此问题。aoeapp.config(函数($routeProvider){$routeProvider.when('/',{controller:'HomeController',templateUrl:'Pages/Home.html'})。when('/Exam/:id',{controller:'ExamController',templateUrl:'Pages/Exam.html'})。when('/Test/:id',{controller:'TestController',templateUrl:'Pages/Test.html'})。否则({重定向到:'/'});});但问题是角度路由不起作用,应用程序只接受mvc路由…所以我想知道在路由中要更改什么Pangular不关心服务器端路由。您的角度路由是什么?好的,但如果我使用角度路由,它与mvc路由冲突,并且不起作用,您可以在两个si上使用路由des,但您的角度应用程序只关心角度路由。将角度路由添加到此问题。aoeapp.config(函数($routeProvider){$routeProvider.when('/',{controller:'HomeController',templateUrl:'Pages/Home.html'})。when('/Exam/:id',{controller:'ExamController',templateUrl:'Pages/Exam.html'})。当('/Test/:id',{controller:'TestController',templateUrl:'Pages/Test.html'})时。否则({重定向到:'/'});});但问题是角度路由不工作,应用程序只接受mvc路由…..所以我想知道如果我在$scope.setQueryStringToScopeId=function(id){$scope.id=id;alert($scope.id);};在函数内部工作正常,但在此函数外部再次显示0值我必须查看您的代码,但一旦执行了
$scope.setQueryStringToScopeId
,您就可以
警报($scope.id)
并且它会工作…如果我在$scope.setQueryStringToScopeId=函数(id){$scope.id=id;警报($scope.id);};在函数内部工作正常,但在此函数外部再次显示0值我必须查看您的代码,但一旦执行了
$scope.setQueryStringToScopeId
,您就可以
警报($scope.id)
,它将工作。。。