尝试掌握如何将以下数据作为模型传递给控制器。我想使用模型并在之后将所有内容添加到数据库中。当我将表单提交回控制器时,模型为空。是因为其他所有东西都是空的吗?我必须将其他所有内容作为隐藏字段传回去吗?在进入控制器之前,如何在View上对其进行排序?
我的控制器基本上将一个看起来像这样的xml文件反序列化回视图
<category>
<id>1</id>
<description>movies</description>
<genre>
<genres>
<id>1</id>
<name>comedy</name>
</genres>
<genres>
<id>2</id>
<name>action</name>
</genres>
<genres>
<id>3</id>
<name>adventure</name>
</genres>
<genres>
<id>4</id>
<name>drama</name>
</genres>
<genres>
<id>5</id>
<name>romance</name>
</genres>
</genres>
</category>
视图/表单看起来像这样
<form>
<ul>
@for (int x = 0; x < Model.categories[i].genres.Count(); x++)
{
<li>
<label for="@Model.categories[i].genres[x].name">
<input type="checkbox" name="@Model.categories[i].genres[x].name" value="@Model.categories[i].genres[x].id" checked="@Model.categories[i].genres[x].selected" /> @Model.categories[i].genres[x].name
</label>
</li>
}
</ul>
</form>
答案 0 :(得分:1)
为所有复选框添加固定名称,例如GenreIds。
然后,在您的操作中,您应该收到string[] genreIds
参数。
发布表单时,genreIds将作为am数组发布,因此必须在数组参数中接收。
如果这不起作用,因为您有许多类别并希望在其自己的类别中接收每组GenreIds,那么您可以发送表单值的JSON表示并在服务器端接收和反序列化它。为此:
在剃须刀模板上:
处理表单sumit事件,并且:
在服务器端:
如果您使用JSON.NET,则可以转换JSON to XML或to an anonymous type object。还有其他的可能性。
请记住,在任何情况下,类型ID都将始终为string[]
(或int
,如果是这种情况),此数组将仅包含选中的值。
有一个最后的可能性是手动处理Request.Form
“。但这更难做到。
答案 1 :(得分:0)
尝试使用CheckboxFor而不是输入标记。
对于您的代码,您没有与复选框关联的ID。你应该如何在你的控制器中收到它?