使用角度js

时间:2016-02-01 14:11:59

标签: angularjs ajax asp.net-mvc asp.net-mvc-5

我想根据mvc控制器返回的json结果设置下拉值。

代码背后(mvc控制器)

 public ActionResult GetProject(int Id)
        {
            using (ManagementSystemEntities db = new ManagementSystemEntities())
            {
                return Json(db.SelectProject(Id).ToList(), JsonRequestBehavior.AllowGet);
            }
        }

以上行正常工作。它返回项目列表。

返回列表:

Id    Title
1      test
2      test2

我想通过其值Id = 1

选择下拉值作为“test”

HTML>>

 <select ng-options="project.Title for project in projectList" id="ddlProject" ng-model="selectedProject">
      <option value="">-- Select Project --</option>
      <option data-ng-repeat="project in projectList" value="{{project.Id}}"> {{project.Title}}</option>
    </select>

没有与角度加载有关的问题。一切正常。只需要根据ajax结果设置下拉值。

Ajax Call(角度代码)&gt;&gt;

填充下拉选项代码:(正常工作)

$http.get(service_url + "Project/GetProject", { params: { "id": 0 } })
           .success(function (response) {
                if (response.length < 1) {
                    // No Record

                }
                else {

                    $scope.projectlist = response;
                }
            })
            .error(function (data) {
                fnsuccessmodal("error in load", "error");
            });

下拉列表中的设定值代码:

$http.get(service_url + "Project/GetProject", { params: { "Id": 1 } })
           .success(function (response) {
               if (response.length < 1) {
                   // No Record
               }
               else {
                    $.each(response, function (index, item) {

                       //console.log(item.ProjectId);  it is displaying 1 as in console screen I am only getting project which have Id equal to 1.

                       $scope.selectedProject = $scope.projectList[item.ProjectId]; // This line not working

                   });
               }
           })
         .error(function (data) {
             fnSuccessModal("Error in Load", "Error");
         });

请帮忙。

1 个答案:

答案 0 :(得分:0)

这是一些推荐。如果你不想让他们去(BUT)吼叫。首先,如果要传递集合,则应返回一个列表,如果要按id搜索,则只返回一个项目,而id是项目的主键。 我在这里写了这个,所以可能会有一些错误。

public ActionResult GetProject(int? Id)
{
    using (ManagementSystemEntities db = new ManagementSystemEntities())
    {
        return Json( id.HasValue ? db.SelectProject(Id).FirstOrDefault() : db.SelectAllProjects().ToList(), JsonRequestBehavior.AllowGet);
    }
}

通过这种方式获取列表,您可以将代码更改为

$http.get(service_url + "Project/GetProject", { })
       .success(function (response) {
            if (response.length < 1) {
                // No Record
            }
            else {
                $scope.projectlist = response;
            }
        })
        .error(function (data) {
            fnsuccessmodal("error in load", "error");
        });

按逻辑

获取所选项目
$http.get(service_url + "Project/GetProject", { params: { "Id": 1 } })
       .success(function (response) {
           if (response) {
                   $scope.selectedProject = response; 
               });
           }
       })
     .error(function (data) {
         fnSuccessModal("Error in Load", "Error");
     });

对于标记,你不应该在ng-repeat

中有一个ng-options
<select ng-options="project as project.Title for project in projectList track by project.Id" id="ddlProject" ng-model="selectedProject">
  <option value="">-- Select Project --</option>
</select>

但是如果你不想改变我所谈论的事情,只需改变这一点就可以了。这是你的选择

$http.get(service_url + "Project/GetProject", { params: { "Id": 1 } })
       .success(function (response) {
           if (response.length < 1) {
               // No Record
           }
           else {
                $.each(response, function (index, item) {
                   //console.log(item.ProjectId);  it is displaying 1 as in console screen I am only getting project which have Id equal to 1.

                   $scope.selectedProject = item:
               });
           }
       })
     .error(function (data) {
         fnSuccessModal("Error in Load", "Error");
     });

和标记你必须通过这样引入一个轨道

<select ng-options="project as project.Title for project in projectList track by project.Id" id="ddlProject" 
ng-model="selectedProject">
  <option value="">-- Select Project --</option>
</select>

这是我创建的plunker,其中http.get由超时替换

在这里,您可以找到ngRepeat track by

的文档

最佳,