Я работаю над веб-приложением на 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; }
Я бы предположил, что есть какой-то способ получить выбранный текстовый элемент из выпадающего списка и сохранить его в модели представления перед публикацией модели представления в контроллер. Но я не смог найти его до сих пор, и я надеюсь, что кто-то еще может знать.