【发布时间】:2019-05-06 18:39:18
【问题描述】:
我正在尝试使用 Select2、Razor 和 MVC 框架创建一个多选列表。我的问题是控制器中接收数组输入的对象始终为空。前端看起来如下:
<form class="form-horizontal" method="post" action="@Url.Action(MVC.Configurazione.Contatori.Edit())">
<div class="form-group">
<div class="col-lg-8">
<select class="form-control attributoSelect2" name="attributiSelezionati" value="@Model.AttributiSelezionati">
<option value="@Model.AttributiSelezionati" selected>@Model.AttributoDescrizione</option>
</select>
</div>
</div>
</form>
动作方法“Edit”,是从下拉列表中接收所选项目数组的控制器方法。
Javascript 如下:
$('.attributoSelect2').select2({
placeholder: "Search attribute",
multiple: true,
allowClear: true,
minimumInputLength: 0,
ajax: {
dataType: 'json',
delay: 150,
url: "@Url.Action(MVC.Configurazione.Attributi.SearchAttrubutes())",
data: function (params) {
return {
search: params.term
};
},
processResults: function (data) {
return {
results: data.map(function (item) {
return {
id: item.Id,
text: item.Description
};
})
};
}
}
});
最后,C# 控制器有一个对象,该对象期望从视图中检索数据并被定义:
public string[] AttributiSelezionati { get; set; }
而接收数据的HttpPost方法是:
[HttpPost]
public virtual ActionResult Edit(EditViewModel model) { }
谁能告诉我我做错了什么以及我应该改变哪些地方才能找到问题?
【问题讨论】:
-
您正在使用带有
select2的多项选择,对吗?为什么不在选择元素上使用ListBoxFor或multiple属性? -
但我在 Javascript 中使用了“multiple: true”标志,这就是我不在视图中使用它的原因。我不确定如何使用 ListBoxFor,但我目前正在研究一些文档,当我取得进展时会更新你。谢谢。
-
<option>内容是否包含来自 AJAX 的所有选项值?尝试用匹配的大小写分配name属性,例如name="AttributiSelezionati"。此外,您还通过value="@Model.AttributiSelezionati"分配默认值,它具有string[]数组类型而不是string。 -
@Razvan,您想将 Select2 中的字符串数组发送到您的控制器操作方法吗?
-
是的,我想将所选项目发送到控制器操作方法
标签: javascript c# asp.net asp.net-mvc jquery-select2