我无法理解如何使用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有意义吗?
答案 0 :(得分:11)
我建议您将视图模型更改为
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
属性。