回发 MVC 中的复选框值

Sac*_*chu 0 asp.net-mvc asp.net-mvc-3

我有一个如下所示的模型

public class security
    {  
    public long id { get; set; }
    public long user_id { get; set; }
    public long submenu_id { get; set; }
    public long module_id { get; set; }
    public long flag { get; set; }
    public string module { get; set; }
    public string submenu { get; set; }
  }
Run Code Online (Sandbox Code Playgroud)

如果用户有权访问该菜单,flag则将在其中10

我可以使用 pagedlist 在视图中显示它

@foreach (var item in Model)
{
<tr class="">
<td>
@if (item.flag == 1)
{
<input type="checkbox" name="flags[]" checked="checked" id="@item.id" value="1" />
}
else
{
<input type="checkbox" name="flags[]"  id="@item.id" value="0" /> 
}
</td>
<td>@Html.DisplayFor(modelItem => item.module) </td>
<td> @Html.DisplayFor(modelItem => item.submenu)</td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)

它将给出以下输出

安全

此处用户可以访问5菜单,但无权访问1 现在管理员可以通过选中和取消选中复选框来更改权限。

我的操作结果签名如下

 public ActionResult security(client_module_security c1,string[] flags)
        {

        }
Run Code Online (Sandbox Code Playgroud)

但这并不是发回此处的值,并且标志字符串仅包含已检查的数字。下面的屏幕截图

模块 旗帜

如果我的逻辑不好请纠正我。为了更新相同内容需要进行哪些更改?

小智 5

所有复选框的值都是0or 1,因为您使用<input .. value="1" />or设置它们<input .. value="0" />(并且由于只有选中的复选框回发,因此控制器中的值始终为1)。相反,将value属性设置为id项目的

<input type="checkbox" name="flags[]" checked="checked" value ="@item.id" />
Run Code Online (Sandbox Code Playgroud)

string[] flags参数现在将包含所有已检查项目的 ID 数组。