Как я могу получить выбранный элемент из нескольких динамически добавленных выпадающих списков Select2? - PullRequest
0 голосов
/ 18 апреля 2019

Я работаю над веб-приложением на C # Asp.Net и пытаюсь добавить возможность динамически добавлять некоторые выпадающие списки select2 в нашу форму создания проекта.

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

Методы, которые я пробовал:

  • Добавление частичного тега ... вместо выбора ...
  • Изменение выбора asp-for="TeamMembers ... для выбора asp-for="TeamMembers[0]... [1][2], т. Д.
  • Добавление оператора @if ... из контроллера в строку var html
  • Выход из @ в строке @if ...

Частичное представление, которое успешно работает один раз

@model Waypoints.ViewModels.ProjectsCreateViewModel

<h5>Add Team Members</h5>
<div class="form-group" id="teamMembersAddDiv">
    <select asp-for="TeamMembers" class="project-team-members-enabled form-control">
        @if (null != Model && null != Model.TeamMembers)
        {
            foreach (var item in Model.TeamMembers.OrderBy(i => i))
            {
                <option selected="selected">@item</option>
            }
        }
    </select>
</div>
<input type="button" class="btnAdd" value="+" />

Javascript, который добавляет выпадающий список select2, который не добавляется в модель представления

        function addRow() {
            var html = '<select asp-for="TeamMembers" class="project-team-members-enabled form-control">'
                +'@if (null != Model && null != Model.TeamMembers){foreach (var item in Model.TeamMembers.OrderBy(i => i)){<option selected="selected">@item</option>}}'
                + '</select>'
            $(html).appendTo($("#teamMembersAddDiv"))

            $('.project-team-members-enabled').select2({
            tokenSeparators: [","],
            minimumInputLength: 1,
            ajax: {
                delay: 150,
                url: '@Url.Action("TypeaheadSearch", "Profiles")',
                dataType: 'json',
                async: true,
                data: function (params) {
                    return {
                        pageSize: 10,
                        pageNum: params.page || 1,
                        searchTerm: params.term
                    };
                },
                processResults: function (data, params) {
                    params.page = params.page || 1;
                    return {
                        results: data.results,
                        pagination: {
                            more: (params.page * 10) <= data.total
                        }
                    };
                },
                cache: true
            },
            createTag: function (params) {
                var term = $.trim(params.term).replace(/\w\S*/g, function (txt) {
                    return txt.charAt(0).toUpperCase() +
                        txt.substr(1).toLowerCase();
                });

                if (term === '') {
                    return null;
                }
                if (!/^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$/g.test(term)) {
                    return null;
                }

                return {
                    id: term,
                    text: term

                }
            }
        });
        };

Viewmodel TeamMembers

TeamMembers = new List<string>();
...
public IList<string> TeamMembers { get; set; }

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

...