使用Select Multiple Post to Web API的表单

时间:2013-05-02 23:15:22

标签: jquery asp.net-web-api

我正在使用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是否支持接收从表单发布的模型中的数组属性?

感谢。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

要向Web API提交多选表单字段,您只需使用表单生成的数组值提交到Web API,并在您接受的控制器模型中指定C#属性输入字符串[]。

示例:

HTML:

&#13;
&#13;
     <div class="box box-one" ng-show="!test.showBoxOne">
&#13;
&#13;
&#13;

JS:

&#13;
&#13;
<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;
&#13;
&#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);
  }
});