我在页面上有一个复选框列表,但是它们的值没有到达控制器。
ListViewModel
是我在此视图中需要的所有模型的地方。 Techniques
是来自数据库的Technique
列表。 Technique
有TechiqueID
和Type
作为属性。 tech
是一个bool数组,具有相同大小的技术类型
@model ListViewModel
@foreach (var item in Model.Techniques ){
<div>
@Html.CheckBoxFor(m => m.tech[item.TechniqueID])
@item.Type
</div>
}
知道为什么tech[]
在控制器中为空?它应该在控制器上tech[0] = false
,tech[1] = false
等等。
输出:
<div>
<input data-val="true" data-val-required="The Boolean field is required." id="tech_1_" name="tech[1]" type="checkbox" value="true" /><input name="tech[1]" type="hidden" value="false" />
Slippers, Distracting Tasks
</div>
<div>
<input data-val="true" data-val-required="The Boolean field is required." id="tech_2_" name="tech[2]" type="checkbox" value="true" /><input name="tech[2]" type="hidden" value="false" />
Hallway Placement
</div>
答案 0 :(得分:1)
您的问题是控件列表需要基于0并且是顺序的。您的第一项是基于1.
如果你需要保留它,那么你需要为此编写一个自定义模型绑定器。一个更简单的解决方案可能是简单地从TechniqueID中减去一个,然后在使用它时将其添加回去。
另一种选择是添加一个名为tech [0]的隐藏字段,并忽略帖子列表中的第一项。
答案 1 :(得分:1)
您没有正确构建您的HTML。模型绑定器不能像这样绑定输入名称。请参阅此article,其中说明了如何对列表进行模型绑定。 来自文章:
您正在寻找的Html输出:
<form method="post" action="/Home/Create">
<input type="text" name="[0].Title" value="Curious George" />
<input type="text" name="[0].Author" value="H.A. Rey" />
<input type="text" name="[0].DatePublished" value="2/23/1973" />
<input type="text" name="[1].Title" value="Code Complete" />
<input type="text" name="[1].Author" value="Steve McConnell" />
<input type="text" name="[1].DatePublished" value="6/9/2004" />
<input type="text" name="[2].Title" value="The Two Towers" />
<input type="text" name="[2].Author" value="JRR Tolkien" />
<input type="text" name="[2].DatePublished" value="6/1/2005" />
<input type="submit" />
</form>
实现此输出的示例代码:
<% for (int i = 0; i < 3; i++) { %>
<%: Html.TextBoxFor(m => m[i].Title) %>
<%: Html.TextBoxFor(m => m[i].Author) %>
<%: Html.TextBoxFor(m => m[i].DatePublished) %>
<% } %>