Где заполнить несколько выпадающих списков

0

Я пытаюсь определить правильный подход к заполнению нескольких выпадающих списков на странице просмотра приложения.net MVC, которое использует angularJS.

В моем приложении, разработанном как приложение для силосов SLA. Я использую угловой модуль ngRoute и $ routeProvider для описания нескольких страниц HTML для одной страницы CSHTML.

.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 в основном пуста, за исключением <div ng-view></div>. Маршрутизированные HTML-страницы загружаются в div ng-view.

<div data-ng-app="club" id="club" data-ng-controller="rootViewModel">
    <h2>{{ pageHeading }}</h2>
    <div ng-view></div>
</div

Каждая страница просмотра html, загружаемая в ng-view, имеет соответствующий javascript-контроллер viewmodel.

Я начал заполнять первое раскрывающееся меню на странице html, используя $ http.get в угловом контроллере, чтобы получить данные списка (json) с вызова сервера. Затем выполните JSON.parse в файле result.data и заполните элемент управления списком выбора, который определен на странице html.

$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);
    });
}

Я мог бы продолжить этот подход для каждого раскрывающегося списка на моей странице, создав несколько вызовов сервера, чтобы заполнить все мои выпадающие списки... но это кажется утомительным и тяжелым.

Будет ли разумный подход рассматривать построение одного вызова сервера, который возвращает несколько коллекций, по одному для каждого раскрывающегося списка, а затем я буду разбирать их, чтобы заполнить все выпадающие списки?

Я хотел бы предварительно заполнить списки на С# на стороне сервера, однако мои файлы cshtml пусты, за исключением div ng-view, поэтому там нет кодировки.

Итак, на мой вопрос... если мои HTML-представления содержат весь html-контент, а cshtml пустые... какую стратегию я должен использовать для заполнения нескольких элементов управления списком html со стороны сервера?

  • 0
    Почему вы используете JS DOM для создания угловых списков? Почему бы не сделать это угловым способом через ng-repeat?
  • 0
    @Kindzoku Киндзоку ... это правильный вопрос. Ответ в том, что я не мог заставить ng-repeat работать с моим ответом json, поэтому я по умолчанию установил то, что знаю. И еще, я все еще учусь угловому пути. Это на моем todo, чтобы преобразовать его в ng-repeat.
Показать ещё 1 комментарий
Теги:
asp.net-mvc

2 ответа

1
Лучший ответ

Используя MVC, вы можете создать ViewModel, который содержит все необходимые коллекции и вернуть эту коллекцию в ваш угловой контроллер. Ваша модель просмотра будет выглядеть примерно так:

public class MyViewModel
{
public List<ColorModel> Colors{get;set;}
public List<FabircModel> Fabrics {get;set;}
}

В вашем контроллере MVC:

MyViewModel mvm = new MyViewModel();
mvm.Colors = get colors here;
mvm.Fabrics = get fabrics here;

return Json(mvm, JsonRequestBehavior.AllowGet);

В вашем объекте успеха в Angular:

myservice.getData()
.success(function(data){
$scope.colors = data.Colors;
$scope.fabrics = data.Fabrics;
})

Надеюсь, это поможет или, по крайней мере, запустит вас.

  • 0
    Спасибо за подход к дизайну. Я могу работать с этим.
  • 0
    Пожалуйста. Рад, что это помогло!
0

Если вы проигнорируете тот факт, что используете углы, ответ будет состоять в том, чтобы заполнить модель представления тем, что вам нужно, и бритву cshtml, потому что вы используете угловое... ничего не меняется... потому что вы сказали, что SERVER-SIDE все еще ответ.

Если вы переместите это на клиент, то угловое обслуживание, которое может кэшировать данные, возможно, является самым прямым способом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню