将复选框列表绑定到数据模型中的Dictionary

本文关键字:Dictionary 数据模型 复选框 列表 绑定 | 更新日期: 2023-09-27 18:10:08

我是MVC3的新手,我不明白如何使用复选框。在我的模型中,我有一个服务列表和一个可用服务列表。其思想是显示所有可用的服务,并让用户通过选中相应的复选框来选择使用哪一次。

public Activity()
        {
            .....
            this.Services = new List<Service>();
            this.ServicesChecklist = new Dictionary<Service, bool>();
        }
        public virtual ICollection<Service> Services { get; set; }
        public Dictionary<Service, bool> ServicesChecklist { get; set; }

我能够使用Controller的私有方法正确加载服务表私有字典AssignServiceToActivity(Activity Activity){

            List<Service> s = new List<Service>(db.Services);
            Dictionary<Service, bool> ServicesChecklist = new Dictionary<Service, bool>();
            bool found;

            foreach (var ser in s)
            {
                found = false;
                foreach (var currService in activity.Services)
                {
                    if (ser.id == currService.id)
                    {
                        ServicesChecklist.Add(ser, true);
                        found = true;
                        break;
                    }
                }
                if (!found)
                    ServicesChecklist.Add(ser, false);
            }
            return ServicesChecklist;
        }

in my view I am trying to bind the checkboxes to the ServicesChecklist dictionary
<div id="tabs-2">
         <table style="width:100%">
            <tr>
               <th>
                  Service
               </th>
               <th>
                  Type
               </th>
               <th>
                  Contact
               </th>
               <th>
                  Phone
               </th>
            </tr>
            @foreach (var s in @Model.ServicesChecklist)
            {
            <tr>
               <td>
                  @Html.CheckBox(s.Key.name, s.Key.id) 
                  @Html.DisplayFor(modelItem => s.Key.name)                  
                </td>
               <td>
                  @Html.DisplayFor(modelItem => s.Key.ServiceType.name)
               </td>
               <td>
                  @Html.DisplayFor(modelItem => s.Key.contact_name)
               </td>
               <td>
                  @Html.DisplayFor(modelItem => s.Key.contact_phone)
               </td>
            </tr>
            }
         </table>
      </div>

当页面加载但用户选择没有保存在模型中时,它可以正常工作

![enter image description here][1]

  [1]: https://i.stack.imgur.com/Buklf.png

将复选框列表绑定到数据模型中的Dictionary

您需要使用带有提交按钮的表单将更改提交回服务器,或者在发生更改事件时使用JavaScript提交三个更改。