使用AngularJS填充下拉列表

时间:2017-06-30 07:58:37

标签: angularjs asp.net-mvc drop-down-menu

我想用我创建的名为Venues的表中的值填充下拉列表。这个表中只有两个东西,Venue Id和Name。

我从包含表Venues的数据库创建了一个Code First Entity Data Model,我在我的控制器中创建了这个方法:

public JsonResult GetVenues()
    {
        using (ReservationsModel dc = new ReservationsModel())
        {
            var v = dc.Venues.OrderBy(a => a.Name).ToList();
            return new JsonResult { Data = v, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
        }

然后在我的脚本中我添加了:

$scope.selectedVenue = null;
$scope.venues = [];
$http.get("/home/getvenues").success(function (data) {
    angular.forEach(data, function (item) {
        venues.push(item.Name);
    });
    $scope.list = venues;
}).error(function (status) {
    alert(status);
});

$scope.selectedVenue = $scope.venues[i].Name;

在我看来,我有:

<select ng-model="selectedVenue" ng-options="item in venues">
    <option value="">-- Select Venue --</option>
</select>

我来自这些指南:

http://www.dotnetawesome.com/2016/04/implement-event-scheduler-calendar-angularjs.html

How can I populate a select dropdown list from a JSON feed with AngularJS?

https://jsfiddle.net/pravinmagar/Ljgk8oy0/

2 个答案:

答案 0 :(得分:1)

让我们看看你的代码。(查看评论)

$scope.selectedVenue = null;
$scope.venues = [];
$http.get("/home/getvenues").success(function (data) {
    angular.forEach(data, function (item) {
        // this should be $scope.venues, not just venues
        venues.push(item.Name);
    });
    // you don't need another scope variable
    $scope.list = venues;
}).error(function (status) {
    alert(status);
});
// as $scope.venues is an array of Names, $scope.selectedVenue = $scope.venues[i] is enough
$scope.selectedVenue = $scope.venues[i].Name;

所以,

$scope.venues = [];
$http.get("/home/getvenues").success(function (data) {
  angular.forEach(data, function (item) {
    $scope.venues.push(item.Name);
  });
}).error(function (status) {
  alert(status);
});
// if i has declared a value somewhere in your code, then
$scope.selectedVenue = $scope.venues[i];

并在模板中

<select ng-model="selectedVenue">
  <option value="">Select Venue</option>
  <option ng-repeat="venue in venues" ng-value="venue">{{venue}}</option>
</select> 

答案 1 :(得分:1)

您的html部分没问题,只需要在控制器JS中进行以下修改:

  1. 在推送
  2. 时访问$scope.venues等场所
  3. 指定.success内选择的默认值http.get() is async
  4. <强>代码:

    $scope.selectedVenue = null;
    $scope.venues = [];
    $http.get("/home/getvenues").success(function (data) {
        angular.forEach(data, function (item) {
            $scope.venues.push(item.Name);
        });
        $scope.selectedVenue = $scope.venues[i].Name; // i must be declared in your js
    }).error(function (status) {
        alert(status);
    });