我有以下表单,其中包含我要发送到服务器的多维数组中的数据。问题是我无法在我的控制器中选择这些数据。
的index.html
<form id="my-form" action="/Home/TestingMethod" method="post">
<table id="people" class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Owns Item</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Danny</td>
<td class="items">
<select name="PersonList[1]Item[]" class="form-control">
<option value=""></option>
<option value="Keys">Keys</option>
<option value="Phone">Phone</option>
</select>
</td>
</tr>
</tbody>
</table>
</form>
为MyModel
public class MyModel
{
public List<int> PersonList { get; set; }
}
的HomeController
[HttpPost]
public JsonResult TestingMethod(MyModel model)
{
List<int> list_of_people = model.PersonList;
return Json("I am the server, I got your data.");
}
问题是list_of_people
包含0个元素。
提交表单数据
PersonList[1]Item[]:Phone
相关:how to access Javascript multidimensional array in MVC controller
答案 0 :(得分:2)
您的选择字段的命名约定不正确。为了匹配您的模型结构,它应该如下所示:
PersonList
因为<option value="0">Keys</option>
<option value="1">Phone</option>
...
属性只是一个整数数组。如果您希望能够绑定到整数,还要确保发送整数值:
public class MyModel
{
public List<int?> PersonList { get; set; }
}
如果你想允许空值,请确保你的列表被定义为可以为空的整数:
<option value=""></option>
<option value="0">Keys</option>
<option value="1">Phone</option>
...
现在你可以这样做:
public class MyModel
{
public List<Person> PersonList { get; set; }
}
如果另一方面它是一个复杂的属性:
public class Person
{
public List<Item> Items { get; set; }
}
其中Person的定义如下:
<select name="PersonList[0].Items[0].SomeProperty" class="form-control">
<select name="PersonList[0].Items[1].SomeProperty" class="form-control">
<select name="PersonList[1].Items[0].SomeProperty" class="form-control">
...
然后你可以这样做:
>>> x = np.arange(1, 10).reshape((3, 3))
>>> x
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> i = np.array([0, 1, 2, 5, 8, 7, 6, 3]) # Indices in circular order
>>> x.flat[i]
array([1, 2, 3, 6, 9, 8, 7, 4])
我还建议您浏览following post
,它解释了模型绑定器的工作原理以及它所期望的命名约定。