我正在使用C#Web API来接收具有选择倍数的表单的帖子。
我在Web API方法中的模型类似于:
{Model: { UserName: "Test", Groups: [ {Id:123}, {Id: 2}]}}
换句话说,我的模型是一个包含一些字段的类,也是一个复杂类型的数组。
如果发布的表单数据是:
,WebAPI可以正常工作UserName:Test
Groups[0][Id]:123
Groups[1][Id]:2
但是,如果我使用$(this).serialize()
序列化表单,我会得到类似的结果:
UserName:Test
Groups[][Id]:123
Groups[][Id]:2
哪个WebAPI无法正确处理。
这是将select定义为:
<select name="Groups[][Id]" >...</select>
我已尝试过其他方法来定义选择,但我无法完成它。
我能够通过基于表单元素构建对象并将对象传递给ajax而不是$(this).serialize
来解决它,但这是一个丑陋的黑客。
WebAPI是否支持接收从表单发布的模型中的数组属性?
感谢。
答案 0 :(得分:2)
我遇到了同样的问题,使用https://www.nuget.org/packages/ImranB.ModelBindingFix
解决了这个问题答案 1 :(得分:0)
要向Web API提交多选表单字段,您只需使用表单生成的数组值提交到Web API,并在您接受的控制器模型中指定C#属性输入字符串[]。
示例:的
HTML:
<div class="box box-one" ng-show="!test.showBoxOne">
&#13;
JS:
<form>
<input id="regularTextInput" name="regularTextInput">
<select multiple id="multiSelectField" name="multiSelectField">
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
</select>
</form>
&#13;
C#:
$.ajax({
url: "http://localhost:####/api/MyController/DoSomething",
method: "POST",
data: {
singleVal: $('#regularTextInput').val(),
selectedVals: $('#multiSelectField').val()
},
success: function(data, textStatus, jqXHR) {
console.log(data);
},
error: function(jqXHR, textStatus, error) {
console.log(error);
}
});