c# - 如何在 MVC 模型中表示一个月的复选框

标签 c# asp.net-mvc razor asp.net-mvc-5

我无法理解如何使用 MVC 创建下表,并将其成功绑定(bind)到模型:

enter image description here

我基本上需要跟踪一个月中的哪几天需要发生事件。这是我对模型的尝试:

编辑 :这不是一个月,而是一个任意的 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/

相关文章:

css - 将 css 文件移动到新的 css 文件夹后无法从我的 css 访问我的图片

asp.net-mvc-3 - MVC : No parameterless constructor defined for this object

c# - Razor 无法识别 Html 类?

asp.net - MVC 4 中的防伪 cookie token 和表单字段 token 不匹配

c# - 使用 Unity IoC 时如何实现 Ninject .InSingletonScope()

c# - MVC/ Razor : textbox should show NO value after postback

c# - 将任务作为要在异步方法 C# 中的循环内调用的参数传递

c# - 我们如何改进下面的代码行?

c# - 为什么我可以在 c#7.3 中将 ref 结构声明为类的成员?

c# - 如何避免使用 asp.net mvc 4 在模型中更新某些字段