AngularJS嵌套视图

时间:2015-10-02 02:14:28

标签: angularjs asp.net-mvc-4 angularjs-routing angularjs-view

于10/05编辑

我一直在关注这个anjularjs和asp.net教程。我试图自己添加一些额外的东西,但我被卡住了。我从服务器获取一个JSon对象,我试图将对象的内容显示给客户端。问题是当我希望看到ID,名称和密码列表时,我在客户端获得[object Object]。我在这里缺少什么?

Arrays

包含AngularJS和Angular-Route版本1.4.7的索引页

//The controller

  myApp.controller('userController', function ($scope,$http /*UserService*/) {
      //  $scope.Users = [];
        $http.post('/Templates/ListUsers',{ id : 0})
        .success(function (data) {
            // $scope.Users = data.data;
            if (data.Ok) {
                $scope.Users = data.data;
                console.log($scope.Users);
            }
        }).error(function(error){
            console.log(error);
        });

//The form where the data is supposed to display. 
<div class="row">
       <div class="form-group">
           <li ng-repeat="x in Users"> 
**//I am iterating through the users, 
//so I was not expected to see [object Object]**
               {{ x.ID, x.Name, x.Password  }}
           </li>
       </div>
   </div>   

//The JSON object in the console window:
[{"ID":1,"Name":"Name1","Password":"Password1"},
{"ID":2,"Name":"Name2","Password":"Password2"},     
{"ID":3,"Name":"Name3","Password":"Password3"},
{"ID":4,"Name":"Name4","Password":"Password4"}]

//于10/06更新:

我没有使用CDN引用,而是下载了AngularJS和AngularJS-Route 1.4.7,并引用了它们。当我运行应用程序时,它只显示整个JSON对象。

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
  <head>
    <title>AngularJS Routing example</title>
      <base href="/">
  </head>

  <body>

    <div class="container">
        <div class="row">
        <div class="col-md-3">
            <ul class="nav">
                <li><a href="/NewOrder"> Add New Order </a></li>
                <li><a href="/ShowOrders/123"> Show Order </a></li>
               <div ng-controller="CalculatorController">
                <li><a href="/Calculator">Calculator</a></li>
              </div>
                <li><a href="/Users">Add Users</a></li>
            </ul>
        </div>
        <div class="col-md-9">
            <div ng-view></div>
        </div>
        </div>
    </div>


@*   <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.js"></script>
   <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular-route.js"></script>  *@
    <script src="~/Scripts/angular.js"></script>
    <script src="~/Scripts/angular-route.js"></script>
   <link rel="stylesheet" href="style.css" />
    <script src="~/Scripts/myApp.js"></script>
  </body>

添加路线

[HttpGet]
    public JsonResult ListUsers()
     {
       return View();
     }

 [HttpPost]
        public JsonResult ListUsers(int id=0)
        {
            try
            {
                List<User> listUser = new List<User>()
            {
                new User{ ID= 1, Name = "Name1", Password="Password1"},
                new User{ ID= 2, Name = "Name2", Password="Password2"},
                new User{ ID= 3, Name = "Name3", Password="Password3"},
                new User{ ID= 4, Name = "Name4", Password="Password4"}
            };

                return Json(new { Ok = true, data = listUser, message = "Success" }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                ex.ToString();
                return Json(new { Ok = false, data = "", message = "Failure" }, JsonRequestBehavior.AllowGet);
            }
        }

enter image description here

于10/07更新

我注意到更改视图以返回视图并将json对象硬编码到用户的控制器。因此,我添加了另一个带有[HttpPost]注释的方法,将$ http.get更改为$ http.post,并添加了ID参数。此外,我修改了路由以具有可选的ID,以便'/ Templates / ListUsers'可以工作,因此'/ Templates / ListUsers / 1'。我期望$ http.post的参数为1,以使用HttpPost注释重定向到方法,但它没有发生。在这一点上,我不确定事情对我有意义。我再次阅读$ http.post,看看我是否能看到我犯了错误的地方。

2 个答案:

答案 0 :(得分:1)

您的基本模板应该有一个ui-view来保存preLogin局部视图,否则angular会知道放置它的位置。您甚至可以在基本模板上编写模板,或者将其作为指令,然后根据基本控制器中的某些条件显示/隐藏。

答案 1 :(得分:0)

最后,我得到了它的工作,虽然另一个问题突然出现。我删除了默认路由并添加了捕获所有路由。

 routes.MapRoute(
                name : "catchAll",
                url : "{*Url}",
                defaults : new { controller = "Templates", action = 
 "ListUsers", id = UrlParameter.Optional });

巧合的是,我也删除了下面路线的评论

 routes.MapRoute(
                name : "Default",
                url : "{controller}/{action}/{id}",
                defaults : new { controller = "Home", action = 
 "Index", id = UrlParameter.Optional });

我做了一个帖子,但它确实奏效了。如果我评论了捕获所有路线,它工作正常。但是,catch all all route似乎没有做任何事情,因为刷新页面返回404.如果我将catch全部移动到默认路径之上,它也停止了工作。我现在仍然需要弄清楚这一部分。