我搜索了一些文章,但没有一个符合我的问题。我在我的cshtml中有这个代码
@model IEnumerable<MonitoreoIntegrado.Models.Sensores>
@using (Html.BeginForm("Graphics", "Datos_extensometro", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<div style="margin:0; padding:0; border:none; position:absolute; bottom:5px; right:25px;"><input type="submit" id="enviar" class="btn btn-primary" value="Consultar"></div>
<div style="float:left; width:428px; height:105px; padding:5px; overflow-y: scroll;">
<h4 style="margin-top:0px;">Consultar multiples sensores</h4>
@foreach (var item in Model)
{
@Html.CheckBox("sensoresCB", false, new { value = @item.idSensor.ToString() }) @item.nombre <a class="moverse" objetivo="@(item.idSensor)" href=""><span class="glyphicon glyphicon-map-marker" title="Ir al marcador"></span></a><br />
}
</div>
}
这在我的控制器中:
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize(Roles = RolesSistema.Administrador + "," + RolesSistema.Lectura)]
public ActionResult Graphics()
{
return View();
}
我需要帮助才能在我的控制器中接收复选框并检查哪些复选框
答案 0 :(得分:1)
您应该为输入使用唯一ID。最简单的方法:
@for (var i = 0; i < Model.Count(); i++)
{
@Html.CheckBox("sensoresCB["+i.ToString()+"]", false, new { value = Model[i].idSensor.ToString() })
//your other stuff
}
在控制器方面:
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize(Roles = RolesSistema.Administrador + "," + RolesSistema.Lectura)]
public ActionResult Graphics(bool[] sensoresCB) //note this
{
return View();
}
所以你得到了你选择的数组。使用索引来理解它是什么复选框。
答案 1 :(得分:1)
您可以使用item
属性或类似内容扩展Checked
的模型。
public class GraphicsViewModel {
public GraphicsItemViewModel[] Items { get; set; }
}
public class GraphicsItemViewModel {
public bool Checked { get; set; }
public long IdSensor { get; set; }
}
然后,您可以使用对此Checked
属性的绑定来呈现复选框。
@model GraphicsViewModel
@using (Html.BeginForm(/* ....*/) {
// use a for loop so the array is bound correctly
@for (int i = 0; i < Model.Items.Length; i++) {
@Html.CheckBoxFor(m => m.Items[i].Checked)
// post back IdSensor value so we can access it in the controller
@Html.HiddenFor(m => m.Items[i].IdSensor)
}
}
您的控制器应该接受POST数据的模型,您可以重用ViewModel:
[HttpPost]
public ActionResult Graphics(GraphicsViewModel postData) {
bool areAllChecked = postData.Items.All(i => i.Checked);
bool isFirstChecked = postData.Items.First().Checked;
bool isCertainIdChecked = postData.Items.Single(i => i.IdSensor == 1337).Checked;
// ...
}
答案 2 :(得分:0)
我想在这里提一个有用的观点,那就是
如果选中复选框,则回发值将包含a 形式为[InputName] = [InputValue]
的键值对如果未选中复选框,则发布的表单不包含 完全参考复选框。
因此,在控制器操作方法中,您可以使用复选框的名称并获取仅检查的值
例如:
public ActionResult Graphics(bool[] sensoresCB)
{
return View();
}
希望以上信息有用
由于
KARTHIK
答案 3 :(得分:0)
基于@teo van kot
回复,我实现了恢复复选框值。这是我的工作代码。
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize(Roles = RolesSistema.Administrador + "," + RolesSistema.Lectura)]
public ActionResult Graphics(int[] sensoresCB)//you can receive a string[] as well
{
//code and stuff
return View();
}
查看:
@model IEnumerable<MonitoreoIntegrado.Models.Sensores>
@using (Html.BeginForm("Graphics", "Datos_extensometro", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
//some code stuff
@{
int i = 0;
foreach (var item in Model)
{
@Html.CheckBox("sensoresCB[" + i.ToString() + "]", false, new { value = item.idSensor.ToString() }) @item.nombre<br />
i++;
}
}
}