wog*_*les 1 c# asp.net-mvc razor asp.net-mvc-5
我无法理解如何使用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
}
Run Code Online (Sandbox Code Playgroud)
我可以成功渲染一个视图(不受模型约束).我意识到我需要在输入上使用@ 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>
}
Run Code Online (Sandbox Code Playgroud)
如何成功发布选中的复选框?我的ViewModel有意义吗?
小智 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;}
}
Run Code Online (Sandbox Code Playgroud)
然后在视图中
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>
}
Run Code Online (Sandbox Code Playgroud)
旁注:我认为你真的不需要你自己的枚举 - DayOfWeek例如,你可以使用枚举Days.Add(new DayVM() { Day = DayOfWeek.Sunday });.另请注意,我没有为Day属性添加输入,因为您可以从集合中的索引轻松确定该输入.实际上,Day如果手动呈现表头行,则可能根本不需要该属性.
| 归档时间: |
|
| 查看次数: |
1416 次 |
| 最近记录: |