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;
}
});
这将为您提供所需的结构。
我有一个 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;
}
});
这将为您提供所需的结构。