控制器无法将窗体数组绑定到模型



我的cshtml:中有这个

<div class="row checkbox-group">
@foreach (var category in Model._categories)
{
<div class="col-12 col-sm-6 col-md-4 col-lg-3" data-toggle="tooltip" data-placement="top" title="@category.Description">
<input type="checkbox" name="ChosenCategories[]" value="@category.Id" id="checkbox-@category.Id" />
<label class=" btn btn-flat" for="checkbox-@category.Id">
<i class="material-icons-round">
@category.Icon
</i>@category.Name
</label>
</div>
}
</div>

使用serializeArray发送数据

formData = $('form').serializeArray();

我可以在控制台中确认数据是这样发送的。

0: {name: 'ChosenCategories[]', value: '1005'}
1: {name: 'ChosenCategories[]', value: '1006'}
2: {name: 'ChosenCategories[]', value: '1009'}
3: {name: 'ChosenCategories[]', value: '1010'}

但是在控制器中,模型绑定和Request.Form["ChosenCategories"]也是空的。

模型的重要部分如下:

public partial class MyClass
{
public MyClass()
{
ChosenCategories = new HashSet<ChosenCategories >();
}
public virtual ICollection<ChosenCategories > ChosenCategories { get; set; }
}

我正在尝试将ChosenCategories[]绑定到我的模型,但它不起作用。控制器中的数据(Request.Form["ChoosenCategories"](显示为空白。我做错了什么?

下面是一个使用ajax将数组传递给操作的演示:

视图:

<div class="row checkbox-group">
@{var i=0;}
@foreach (var category in Model._categories)
{
<div class="col-12 col-sm-6 col-md-4 col-lg-3" data-toggle="tooltip" data-placement="top" title="@category.Description">
<input type="checkbox" name="ChosenCategories[@i]" value="@category.Id" id="checkbox-@category.Id" />
<label class=" btn btn-flat" for="checkbox-@category.Id">
<i class="material-icons-round">
@category.Icon
</i>@category.Name
</label>
</div>
i++;
}
</div>

这样你的阵列将是:

0: {name: 'ChosenCategories[0]', value: '1005'}
1: {name: 'ChosenCategories[1]', value: '1006'}
2: {name: 'ChosenCategories[2]', value: '1009'}
3: {name: 'ChosenCategories[3]', value: '1010'}

ajax(如果要在ajax中传递数组,则需要使用json类型的数据(:

function test() {
var s = $("#test").serializeArray();
$.ajax({
url: "Test",
type: 'post',
data: JSON.stringify(s),
contentType: "application/json",
success: function (response) {
//end of Ajax
}
});
}

动作:

public IActionResult Test([FromBody]List<Category> l)
{
return View();
}

类别:

public class Category {
public int value { get; set; }
public string name { get; set; }
}

最新更新