如何将html表单外的复选框组添加到模型中

时间:2016-09-26 10:39:12

标签: jquery asp.net-mvc-4 checkbox

我有这段代码

剃刀

@foreach (SFD.Models.General.List.Customer item in Model.CustomerList)
{
  <tr id="@item.CustomerId">
    <td>@Html.CheckBox("CustomerId["+@item.CustomerId+"]")</td>
    ...
  </tr>
}

生成html输出

<input name="CustomerId[22394]" id="CustomerId_22394_" type="checkbox" value="true">
<input name="CustomerId[22394]" type="hidden" value="false">

我需要解决的问题是复选框组在表单之外

@using (Html.BeginForm("Index", "Customer", FormMethod.Post }))
{
...
}

因此在提交值后不会发送复选框组值。所以我的问题是,如何将这些值添加到提交请求中?也许用jQuery onclick事件?复选框组的数据类型属性是合适的,例如数组?

public int[] CustomerId;

但是如何检查该数组中的值是真还是假,可能CheckBoxClass列表更好,但是如何绑定和复选到该列表,或者只显示真值?

1 个答案:

答案 0 :(得分:1)

您可以使用HTML5 form属性将放置在外部的表单控件与该表单相关联,例如

<form id="myForm .... >
    <input type="submit" />
</form>
<input type="text" form="myForm" />

请注意,旧浏览器不支持此功能。

但是,表单控制您的生成无法绑定到int[] CustomerId的属性。首先,您使用非零,无连续索引器生成name属性,其次,如果选中复选框,您的输入会发布CustomerId[22394]=true&CustomerId[22394]=false,如果不是,则只发布CustomerId[22394]=false ,不能绑定到int

您可以在循环中手动创建复选框(请注意,因为您的属性是一个简单的集合,所以您不需要索引器)

@using (Html.BeginForm("Index", "Customer", FormMethod.Post, new { @id = "customerForm" }))
{
    ...
}

@foreach (var item in Model.CustomerList)
{
  <tr>
    <td><input name="CustomerId" value="@item.CustomerId" form="customerForm" type="checkbox" /></td>
    ... 
  </tr>
}

更好的解决方案是使用包含(例如)bool IsSelected属性的视图模型,以便您可以使用强类型HtmlHelper方法,并且您的视图将是

@for (int i = 0; i < Model.CustomerList.Count; i++)
{
    @Html.HiddenFor(m => m.CustomerList[i].CustomerId, new { form = "customerForm" })
    @Html.CheckBoxFor(m => m.CustomerList[i].IsSelected, new { form = "customerForm" })
}

并回发给接受您在视图中使用的相同模型的方法。