获取动态复选框的值

时间:2014-06-16 16:03:14

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 checkbox

我是网络开发的新手。所以,对不起,如果这是我问的愚蠢问题。我正在根据从数据库中提取的可用过滤条件构建一个复选框列表。传递给我视图的模型有一个属性

 public List<string> ServicesList{ get; set; }

我的视图代码包含一个循环,用于为列表中的每个项目创建一个复选框。

            @foreach (string svc in Model.ServicesList)
            {
                if (svc != "")
                {
                    <input type="checkbox" name="SelectedServices" title="@svc" value="@svc" checked="checked" /> @svc
                    <br />
                }
            }

我的控制器操作如下所示:

 public ActionResult ServiceListExplorer(string[] SelectedServices, FormCollection fc)
 {
 }

只要将服务列表显示为复选框并且在控制器操作内具有访问权限,这将在用户检查一旦httppost发生后进行检查。但是,我有两个问题:

  1. 如何通过模型最初检查哪些项目?这将允许我保存他们的过滤条件并预先选择服务。我想也许我需要使用SelectList而不是List但不确定如何。

  2. 如何通过将“checked”属性绑定到模型中的值来使其“动态化”?

2 个答案:

答案 0 :(得分:1)

首先,而不是ServicesList应该是不是字符串列表的对象列表:

    public class Service
    {
    public string ServiceName {get; set;}
    public bool isChecked {get;set;}

    }
    ....
    public List<Service> ServicesList{ get; set; }
    ....
    //that controller will collect data posted from view 
    //(your form will post only checked checkboxes)
    [HttpPost]
        public JsonResult Update(FormCollection services)
        {

            foreach (string item in services)
            {
                System.Diagnostics.Debug.WriteLine(item);
            }

            return Json(services);


        }

不在您的观点中:

@using (Html.BeginForm("Update", "Home", FormMethod.Post)) { 
foreach (MvcMusicStore.Models.Service svc in Model)
            {

        @svc.ServiceName    @Html.CheckBox(svc.ServiceName, svc.isChecked); 
    <br/>

            }
            <input type="submit" value="submit"/>
}

答案 1 :(得分:1)

您应该为例如

定义一个类,而不是创建字符串对象列表
public class ServiceObject
{
  public string Name{get;set;}
  public bool IsChecked{get;set;}
}

然后你的代码将成为 -

public List<ServiceObject> ServicesList{ get; set; }

如果要选中复选框,则必须填写的IsChecked属性为true:

然后这一行将成为 -

  <input type="checkbox" name="SelectedServices" title="@svc" value="@svc" checked=Model.IsChecked />