我想根据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");
});
请帮忙。
答案 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
的文档最佳,