【问题标题】:Obtaining values for Dynamic checkboxes获取动态复选框的值
【发布时间】:2014-08-06 12:32:06
【问题描述】:

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

 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”属性绑定到模型中的值来使其动态化?

【问题讨论】:

  • 你应该有两个列表:一个包含所有可用选项,另一个包含他们选择的列表。
  • 检查此链接:sampathloku.blogspot.com/2013/06/… 您可以使用 CheckBoxListFor 插件

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


【解决方案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 /> 

【讨论】:

    【解决方案2】:

    首先应该是对象列表而不是字符串列表,而不是 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"/>
    }
    

    【讨论】:

    • 这适用于预检查项目,但是如何向控制器报告用户检查/取消检查了哪些项目?
    猜你喜欢
    • 2021-07-01
    • 2019-08-05
    • 1970-01-01
    • 2018-02-17
    • 2023-03-04
    • 2012-06-07
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多