0

我在页面上有一个复选框列表,但是,它们的值没有到达控制器。

ListViewModel是我在这个视图中需要的所有模型。TechniquesTechnique来自数据库的列表。Technique具有TechiqueIDType作为属性。 tech是一个具有相同大小的技术类型的布尔数组

@model ListViewModel
 @foreach (var item in Model.Techniques ){
                <div>
                    @Html.CheckBoxFor(m => m.tech[item.TechniqueID]) 
                    @item.Type 
                </div>
            }

知道为什么tech[]控制器中为 null 吗?它应该在控制器上tech[0] = falsetech[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>
4

2 回答 2

1

您的问题是控件列表需要基于 0 并且是连续的。您的第一项基于 1。

如果您需要保留它,那么您将需要为此编写一个自定义模型绑定器。一个更简单的解决方案可能是简单地从 TechniqueID 中减去一个,然后在您使用它时将其添加回来。

另一种选择是添加一个名为 tech[0] 的隐藏字段,并忽略帖子列表中的第一项。

于 2012-07-12T17:40:37.587 回答
1

您没有正确构建您的 html。模型绑定器无法像这样绑定输入名称。请参考这篇文章,它解释了如何将模型绑定到列表。来自文章:

您正在寻找的 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) %> 

<% } %>
于 2012-07-12T17:43:25.267 回答