我有这段代码
剃刀
@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列表更好,但是如何绑定和复选到该列表,或者只显示真值?
答案 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" })
}
并回发给接受您在视图中使用的相同模型的方法。