在MVC C#View中我显示了具体员工的记录,因为我使用MVCScaffolding和下面的模型
public class Developer
{
public int code { get; set; }
public string areaDev { get; set; }
public string nameDev { get; set; }
public string expDev { get; set; }
public string langDev { get; set; }
}
视图使用剃刀,每个记录都有一个复选框输入
@model IEnumerable<WebApplication1.Models.Developer>
@using(Html.BeginForm("ShowRecords","Home"))
{
<table class="table">
<tr>
<th>@Html.DisplayNameFor(model => model.code)</th>
<th>@Html.DisplayNameFor(model => model.areaDev)</th>
<th>@Html.DisplayNameFor(model => model.nameDev)</th>
<th>@Html.DisplayNameFor(model => model.expDev)</th>
<th>@Html.DisplayNameFor(model => model.langDev)</th>
<th>select</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>@Html.DisplayFor(modelItem => item.code)</td>
<td>@Html.DisplayFor(modelItem => item.areaDev)</td>
<td>@Html.DisplayFor(modelItem => item.nameDev)</td>
<td>@Html.DisplayFor(modelItem => item.expDev)</td>
<td>@Html.DisplayFor(modelItem => item.langDev)</td>
<td><input type="checkbox" name="code" value="@item.code" /></td>
</tr>
}
</table>
<input type="submit" value="SEND" />
}
我想要的是当用户点击视图中显示的一个/多个特定记录的复选框时检索代码信息(整数代码),
在我的控制器中,我收到一个int [],如下所示
public ActionResult ShowRecords(int[] datos)
{
{
foreach(var item in datos)
{ ... some code goes here ... }
return View();
}
但我从视图中收不到任何内容,总是收到NULL
您可以帮助我并告诉我如何检索控制器中到期检查行的代码信息吗?
编辑: 刚刚添加了isChecked属性
public class Developer
{
public int code { get; set; }
public string areaDev { get; set; }
public string nameDev { get; set; }
public string expDev { get; set; }
public string langDev { get; set; }
public bool isChecked { get; set; }
}
向视图发送信息的控制器将新属性设置为false(为了不显示复选框)
while (dr.Read())
{
Models.Developer data = new Models.Developer();
data.code = Convert.ToInt32(dr["code"]);
data.areaDev = dr["areaDev"].ToString();
data.nameDev = dr["nameDev"].ToString();
data.expDev = dr["expDev"].ToString();
data.langDev = dr["langDev"].ToString();
data.isChecked = false;
Records.Add(data);
}
在我的视图中我添加了这个
@Html.CheckBoxFor(modelItem => item.isChecked)
在控制器中我希望收到一个开发人员模型列表
public ActionResult ShowRecords(List<WebApplication1.Models.Developer> datos)
但仍然接收NULL
答案 0 :(得分:2)
您生成的name="code"
复选框因此您需要POST方法签名
public ActionResult ShowRecords(int[] code)
code
参数将包含已选中复选框的值数组。
根据您使用视图模型进行的修改,您的视图需要使用for
循环或自定义EditorTemplate
,以便正确生成name
属性以绑定到集合(请参阅Post an HTML Table to ADO.NET DataTable了解更多详情)
@for (int i = 0; i < Model.Count; i++)
{
<td>
@Html.CheckBoxFor(m => m[i].code) // include hidden input so its submitted
@Html.DisplayFor(m=> m[i].code)
</td>
....
<td>@Html.CheckBoxFor(m => m[i].isChecked)</td>
}
并且POST方法签名将是
public ActionResult ShowRecords(List<Developer> model)
答案 1 :(得分:0)
将操作的参数更改为IEnumerable<WebApplication1.Models.Developer>
,然后检查每个操作的isChecked属性(或者只使用LINQ将其过滤掉)。如果您不喜欢这种方法,可以使用Javascript来返回这些内容。我将指出在使用更多带宽的同时返回模型(因为它将更多数据返回到服务器),但它更符合MVC模式而不是返回整数。
答案 2 :(得分:0)
您可以使用Developper对象和其他isChecked属性创建viewModel。然后修改您的视图以使用:
IEnumerable <DevelopperViewModel>
作为视图的模型并绑定isChecked的值。