我无法理解如何使用 MVC 创建下表,并将其成功绑定(bind)到模型:
我基本上需要跟踪一个月中的哪几天需要发生事件。这是我对模型的尝试:
编辑 :这不是一个月,而是一个任意的 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
}
而且我可以成功渲染 View (未绑定(bind)到模型)。我意识到我需要在我的输入中使用@html.CheckBoxFor。
这是我的 View 的 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 有意义吗?
最佳答案
我建议您将 View 模型更改为
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;}
}
然后在 View 中
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
如果您手动呈现表格标题行,则可能根本不需要属性。
关于c# - 如何在 MVC 模型中表示一个月的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29626914/