asp.net mvc 的控制器中序列化的 select2 值不可用

Serialized select2 value not available in the controller of asp.net mvc

我有一个 div 内有多个控件的视图,我想将其序列化并通过 AJAX.The 将其传递给控制器​​视图中的 SchoolType 字段是 select2多 select 下拉列表。

型号:

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 值在控制器的服务器端显示为 null。我该如何解决这个问题?

可能的问题:因为 SchoolType 值是一个字符串列表,所以它没有映射到 individual 字符串。

编辑 1:我尝试将 div 更改为表单,但同样的问题仍然存在。

编辑 2:此问题在 PHP 中通过更改 select 名称来处理。 This answer 显示示例。

虽然我不确定您是否可以操作序列化部分;您可以手动获取该结构。

您可以像使用 serialize() 一样序列化其他控件并将其分配给模型。对于 Select2,按此方式将其添加到模型中。

model = {};
$(".select2").each(function () {
    var selectedValue = $(this).val();
    if (selectedValue != null) {
        model[this.name] = selectedValue;
    }
}); 

这将为您提供所需的结构。