回复MVC

时间:2015-08-17 06:57:32

标签: 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; }
  }

如果用户有权访问该菜单,则flag将为1 0

我可以使用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>
}

它将给出以下输出

security

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

我的帖子actionresult签名如下

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

        }

但是这里没有回发值,而且标志字符串只包含已选中的数字。屏幕截图

module flags

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

2 个答案:

答案 0 :(得分: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 bool flag { get; set; }
    public string module { get; set; }
    public string submenu { get; set; }
}

查看:

@for(var i = 0; i<Model.Count; i++)
{
   @Html.HiddenFor(m=>m[i].id)
   <tr class="">    
     <td>    
        @Html.CheckBoxFor(m=>m[i].flag)
     </td>
     <td>@Html.DisplayFor(modelItem => modelItem[i].module) </td>
     <td> @Html.DisplayFor(modelItem => modelItem[i].submenu)</td>
   </tr>
}

控制器

public ActionResult security(IList<security> model)
        {
                //each one of the items in your model will have Id an flag property filled with data
        }

答案 1 :(得分:3)

您的所有复选框的值均为SELECT u.* FROM users u JOIN user_org org ON u.user_id = org.user_id WHERE org.org_id = 12345 AND active_ind = 1 0,因为您使用1<input .. value="1" />设置了这些值(并且由于仅选中了复选框,因此您的值在控制器总是<input .. value="0" />)。而是将1属性设置为项目的value

id

<input type="checkbox" name="flags[]" checked="checked" value ="@item.id" /> 参数现在将包含所有已检查项目的ID数组。