关于asp.net:在哪里填充多个下拉列表

Where to populate multiple dropdown lists

我正在尝试确定在使用angularJS的.net MVC应用程序的视图页面上填充多个下拉列表的正确方法。

在我的应用程序中,设计为筒仓SLA应用程序。我正在使用angular ngRoute模块和$ routeProvider来描述单个CSHTML页面的多个HTML页面。

1
2
3
4
5
6
7
.config(function ($routeProvider, $locationProvider) {
        $routeProvider.when('/club', { templateUrl: '/App/Club/Views/MCLView.html', controller: 'mclViewModel' });
        $routeProvider.when('/club/list', { templateUrl: '/App/Club/Views/MCLView.html', controller: 'mclViewModel' });
        $routeProvider.when('/club/show/:clubId', { templateUrl: '/App/Club/Views/ClubView.html', controller: 'clubViewModel' });
        $routeProvider.otherwise({ redirectTo: '/club' });
        $locationProvider.html5Mode(true);
    });

我的CSHTML页面除标记外基本上为空。路由的HTML页面被加载到ng-view div中。

1
2
3
    {{ pageHeading }}
   
</div

加载到ng-view中的每个html视图页面都有一个关联的viewmodel javascript控制器。

我开始使用Angular控制器中的$ http.get从服务器调用中获取列表数据(json),以填充html页面上的第一个下拉列表。然后对result.data执行JSON.parse并填充html页面中定义的选择列表控件。

1
2
3
4
5
6
7
8
9
10
11
$scope.refreshColorsDropdown = function () {

    var sel = document.getElementById('colorDropdown');
    var colors = JSON.parse($scope.mycolors);
    angular.forEach(colors, function(color) {
        var opt = document.createElement('option');
        opt.innerHTML = color.name;
        opt.value = color.hex;
        sel.appendChild(opt);
    });
}

对于页面上的每个下拉菜单,我都可以继续使用此方法,创建多个服务器调用以填充所有下拉菜单……但这似乎很乏味且代码繁重。

一种合理的方法是考虑构建一个服务器调用,该服务器调用返回多个集合,每个下拉列表一个,然后我解析这些集合以填充所有下拉列表?

我想预填充服务器端C#代码上的列表,但是除了ng-view div之外,我的cshtml文件都是空的,因此这里没有任何代码。

对于我的问题...如果我的HTML视图包含所有html内容,并且cshtml为空...我应该使用什么策略从服务器端填充多个html列表控件?


使用MVC,您可以创建一个ViewModel,其中包含所需的所有集合,并将该集合返回到Angular Controller。
您的视图模型将类似于:

1
2
3
4
5
public class MyViewModel
{
public List<ColorModel> Colors{get;set;}
public List<FabircModel> Fabrics {get;set;}
}

在您的MVC控制器中:

1
2
3
4
5
MyViewModel mvm = new MyViewModel();
mvm.Colors = get colors here;
mvm.Fabrics = get fabrics here;

return Json(mvm, JsonRequestBehavior.AllowGet);

在Angular的成功对象中:

1
2
3
4
5
myservice.getData()
.success(function(data){
$scope.colors = data.Colors;
$scope.fabrics = data.Fabrics;
})

希望这可以帮助或至少帮助您入门。


如果您忽略了使用angular的事实,答案将是用所需的数据填充视图模型并剃净cshtml,因为您使用的是angular...没有任何变化....,因为您说的是SERVER-SIDE仍然是答案。

如果将其移至客户端,则可以缓存数据的angular服务可能是最直接的方法。