【问题标题】:asp.net MVC Checkboxes DaysOfWeek enumasp.net MVC 复选框 DaysOfWeek 枚举
【发布时间】:2014-12-21 10:13:57
【问题描述】:

我正在开发一种可用于添加新记录和更新现有记录的表单。 一种表单元素是捕获工作日的多种选择。因此,我实现了 DayOfWeek 枚举。

这就是我的模型的样子

public class EventFormModel
{
    public EventFormModel()
    {

        AvailableDays = (from DayOfWeek d in Enum.GetValues(typeof(DayOfWeek))
                       select new MyDay
                       {
                           Id = (int)d,
                           Name = d.ToString()
                       }

    public List<MyDay> AvailableDays { get; set; }
    public int[] SelectedDays { get; set; }
    }
}

public class MyDay
{
    public string Name { get; set; }
    public int Id { get; set; }
}

我的视图是这样的

@foreach (var day in Model.AvailableDays)
        {
        <input type="checkbox" name="SelectedDays" value="@day.Id"
        @if (Model.SelectedDays != null && Model.SelectedDays.Contains(day.Id))
        {
            <text>checked="checked"</text>
        }
        />@day.Name.Substring(0,3)
        }

现在我面临 2 个问题,1 我无法弄清楚如何从我的复选框中检索它们发布到控制器的值,2 我如何使用存储在数据库中的值填充复选框列表,即 SelectedDays = 1,4,6。

我希望我首先以正确的方式处理这个问题。任何帮助将不胜感激。

【问题讨论】:

    标签: asp.net asp.net-mvc checkbox enums dayofweek


    【解决方案1】:

    人们总是坚持编写自己的 html,然后对为什么事情不起作用感到困惑。

    尽可能坚持使用 html 助手。稍微改变你的模型...使 SelectedDays 成为 bool[7] 的数组

    @for(int i = 0; i < Model.SelectedDays.Count; i++)
    {
        @Html.CheckBoxFor(x => x.SelectedDays[i])
    }
    

    现在复选框会自动填充,并且默认为未选中。

    或者,您可以在 MyDay 类中添加一个“已选择”布尔字段,然后将其更改为:

    @for(int i = 0; i < Model.AvailableDays.Count; i++)
    {
        @Html.CheckBoxFor(x => x.AvailableDays[i].Selected)
    }
    

    注意:不要将其更改为使用 foreach,如果这样做,它不会为名称字段创建正确的索引来发布集合值。

    【讨论】:

      【解决方案2】:

      在修改了一段时间后,我想出了这个可行的解决方案。

      这是模型

      public class EventFormModel
      {
          public EventFormModel()
          {
      
              AvailableDays = (from DayOfWeek d in Enum.GetValues(typeof(DayOfWeek))
                             select new MyDay
                             {
                                 Id = (int)d,
                                 Name = d.ToString()
                             }
      
          public List<MyDay> AvailableDays { get; set; }
          }
      }
      
      public class MyDay
      {
          public string Name { get; set; }
          public int Id { get; set; }
          public bool Selected { get; set; }
      }
      

      这里是视图

      @for(int i = 0; i < Model.AvailableDays.Count; i++)
                  {
                     <div>
                      @Html.CheckBoxFor(x => x.AvailableDays[i].Selected)
                      @Html.HiddenFor(x => x.AvailableDays[i].Name)
                      @Model.AvailableDays[i].Name
                     </div>       
                  }
      

      这里是控制器

      [AcceptVerbs(HttpVerbs.Post), Authorize]
      public ActionResult AddEvent(EventFormModel model)
      {
                  string days = "";
                  for(int i = 0; i < model.AvailableDays.Count; i++)
                  {
                      if (model.AvailableDays[i].Selected)
                      {
                          days = days + model.AvailableDays[i].Name + ",";
                      }
                  }
                  //Do something with your selected days
                  return View(model);
      
       }
      

      使用选择项填充复选框

      string[] stringArray = "Sun,Mon,Tue,Wed".Split(',').ToArray<string>();
      
                  model.AvailableDays = (from DayOfWeek d in Enum.GetValues(typeof(DayOfWeek))
                                         select new TestDay
                                         {
                                             Id = (int)d,
                                             Name = d.ToString().Substring(0, 3),
                                             Selected = stringArray.Contains(d.ToString().Substring(0, 3))
                                          }).ToList();
      

      【讨论】:

        猜你喜欢
        • 2016-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-04
        • 2012-01-21
        • 2015-12-04
        相关资源
        最近更新 更多