如何代表一个MVC模型一个月复选框如何代表一个MVC模型一个月复选框(How to represen

2019-05-12 10:03发布

我不能设法让我周围如何使用MVC创建下表,并成功地将其绑定到一个模型头:

基本上,我需要跟踪的事件需要发生月份的这天。 这是我在模型的尝试:

编辑 :这不是一个月,但对于一个任意4周周期

public class ScheduleViewModel
{
    public int PatientId { get; set; }          
    public List<Schedule> Schedules { get; set;}          
}

public class Schedule {
    public int Week { get;set;}
    public Day Day { get;set;}
    public bool IsSelected { get;set;}    
}

public enum Day
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

我可以成功地呈现视图(未绑定到模型)。 我意识到我需要使用@ html.CheckBoxFor到位在我的投入。

这是我的HTML视图的一个粗略的副本:

@model WebApplication10.Models.ScheduleViewModel
@using (Html.BeginForm())
{
<table class="table table-striped">
    <thead>
        <tr>
            <th></th>
            @{
foreach (Day t in Enum.GetValues(typeof(Day)))
{
    <th>@t</th>
}
            }
        </tr>
    </thead>
    <tbody>

        @{
for (int i = 1; i <= 4; i++)
{
    <tr>
        <td>Week @i</td>
        @foreach (Day t in Enum.GetValues(typeof(Day)))
        {
            <td><input type="checkbox" /></td>
        }
    </tr>
}
        }
    </tbody>
</table>

<div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <input type="submit" value="Create" class="btn btn-default" />
    </div>
</div>
}

我怎么会成功发布其的复选框被选中? 请问我的ViewModel有意义吗?

Answer 1:

我建议你改变你查看模型(县)

public class DayVM
{
  public Day Day { get; set; }
  public bool IsSelected { get; set; }
}
public class WeekVM
{
  public WeekVM()
  {
    Days = new List<DayVM>();
    Days.Add(new DayVM() { Day = Day.Sunday });
    Days.Add(new DayVM() { Day = Day.Monday });
    .. etc
  }
  public List<DayVM> Days { get; set; }
}
public class ScheduleViewModel
{
  public ScheduleViewModel()
  {
    Weeks = new List<WeekVM>();
    Weeks.Add(new WeekVM());
    .... etc
  }
  public int PatientId { get; set; }          
  public List<WeekVM> Weeks { get; set;}          
}

然后在视图

for(int i = 0; i < Model.Weeks.Count; i++)
{
  <tr>
    <td>Week @i</td>
    for(int j = 0; j < Model.Weeks[i].Days.Count; j++)
    {
      <td>
        @Html.CheckBoxFor(m => m.Weeks[i].Days[j].IsSelected)
      </td>
    }
  </tr>
}

附注:我不认为你真的需要你自己在这里枚举-你可以只使用DayOfWeek枚举,例如Days.Add(new DayVM() { Day = DayOfWeek.Sunday }); 。 另请注意,我还没有包括为输入Day属性,因为你可以很容易地确定其在集合中的索引。 事实上, Day属性可能无法在所有的,如果你手工绘制的表格标题行是必需的。



文章来源: How to represent a month of checkboxes in an MVC model