У меня есть представление, в котором есть несколько элементов управления внутри div, которые я хочу сериализовать и передать в контроллер через AJAX. Поле SchoolType в представлении представляет собой выпадающий список выбора select2.
Модель:
public class SchoolModel
{
public string StudentName{ get; set; }
public List<string> SchoolType{ get; set; }
public List<SelectListItem> SchoolTypeList{ get; set; }
}
Вид:
<div id="divSchool">
<div class="row">
<div class="col-md-12">
<div class="col-md-6">
<div class="form-group">
<label asp-for="SchoolType" class="col-md-3 control-label">School Type</label>
<div class="col-md-9">
<select asp-for="SchoolType" asp-items="Model.SchoolTypeList" class="form-control medium"></select>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label asp-for="StudentName" class="col-md-3 control-label">Student Name</label>
<div class="col-md-9">
<input asp-for="StudentName" class="form-control" />
</div>
</div>
</div>
</div>
</div>
</div>
Контроллер:
[HttpPost]
public ActionResult Index(SchoolModel model)
{
}
Мой код JS:
$('#SchoolType').select2({
placeholder: "Filter by school"
}
$("document").on("click", ".btnCheck", function () {
var model = $('#divSchool').find('select, textarea,input').serialize();
$.ajax({
url: "/Student/Index",
type: 'POST',
data: { model: model },
cache: true,
async: true,
}).done(function (result) {
}).fail(function (error) {
})
});
Однако сериализованный div выглядит примерно так
model = "StudentName=Test&SchoolType=1b&SchoolType=26a"
Хотя эти значения находятся на стороне клиента, в AJAX значение StudentName отображается нормально, а значение SchoolType отображается как ноль на стороне сервера в контроллере. Как это исправить?
Возможная проблема: поскольку значение SchoolType является списком строк, оно не сопоставляется с отдельными строками.
РЕДАКТИРОВАТЬ 1: Я пытался изменить div в форме, но та же проблема сохраняется.
РЕДАКТИРОВАТЬ 2: Эта проблема решается в PHP путем изменения имени выбора. Этот ответ показывает пример.