使用复选框数据为循环制定时间表



由于某些原因,我的代码出现了问题,无法解决。我有一个带有复选框的网站(星期一至星期五(,用户可以选择一周中哪些日子可用。我可以毫无问题地从复选框中获取和存储数据,但我的问题是调度代码。例如,假设用户选择周一和周二作为可用日期,出于某种原因,我的调度代码无法识别这一点。

我想也许可以做这样的事情,但似乎无法正确实现

用户选择周一和周二使用CurrentTime.DayOfWeek比较用户何时可用任何提示都非常有用!:(

在服务器端:

public ActionResult Edit()
{
var model = new DaysViewModel();
model.Days.AddRange( new List<CDay> {
new CDay("Monday"),
new CDay("Tuesday"),

new CDay("Wednesday"),
new CDay("Thursday"),
new CDay("Friday")
});
return View(model);
}

型号:

public class DaysViewModel  
{
public List<CDay> Days { get; set; } = new List<CDay>();
}
public class CDay
{
public CDay()
{
Name = string.Empty;
Selected = false;
}
public CDay(string name) 
{
Name = name;
Selected = false; 
}      
[Required]
public string Name { get; set; }
[Required]
public bool Selected { get; set; }
}

asp.net

@model Models.DaysViewModel
@using (Html.BeginForm("Edit", "Home"))
{   
@Html.AntiForgeryToken() 
for(int i=0; i < Model.Days.Count; i++)  
{
<div class="form-group row">
@Html.CheckBox("Days[" + i + "].Selected", Model.Days[i].Selected)   
@Html.Hidden("Days[" + i + "].Name", Model.Days[i].Name)
<span>@Model.Days[i].Name </span>   
</div>
}
<input type="submit" value="Save" />
}

我的日程安排代码:

for (int i = 0; i < days.Count; i++)
{
if (days[i].Selected.Equals(true))
{
// schedule code here
// for some reason does not detect which days user chooses 
}
}

要保存的预订模型

public class StaffBooking
{
public int Id { get; set; }
public int StaffId { get; set; }
public DateTime BookDate { get; set; }
}

然后我为预订目的创建了一个ViewModel

public class StaffBookingVM
{
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public int StaffId { get; set; }
public List<ScheduleDate> ScheduleDates;
private readonly WorkshopProContext db;
public StaffBookingVM(WorkshopProContext _db)
{
db = _db;
ScheduleDates = new List<ScheduleDate>();
}

public void GetSchedule()
{
do
{
ScheduleDate newItem = new ScheduleDate
{
StaffId = StaffId,
SelDate = FromDate,
Booked = db.StaffBooking.Where(a => a.StaffId == StaffId && a.BookDate == FromDate).Any()
};
ScheduleDates.Add(newItem);
FromDate = FromDate.AddDays(1);
} while (FromDate < ToDate);
}
}
public class ScheduleDate
{
public int StaffId { get; set; }
public DateTime SelDate { get; set; }
public bool Booked { get; set; }
}

控制器

public class ScheduleController : Controller
{
private readonly StaffBookingVM VM;
public ScheduleController(StaffBookingVM _VM)
{
VM = _VM;
}

public IActionResult Index()
{
return View();
}
public ActionResult GenerateSchedule()
{
VM.FromDate = DateTime.Today.AddDays(-5);
VM.ToDate = DateTime.Today;
VM.StaffId = 1;
VM.GetSchedule();
return View(VM);
}
}

查看

@model WorkshopPro.ViewModels.StaffBookingVM

<table class="table">
@foreach (var item in Model.ScheduleDates)
{
<tr>
<td>
@if (@item.Booked == true)
{
<input type="submit" name="Selected" value="@item.SelDate" checked="checked">
}
else
{
<input type="submit" name="Selected" value="@item.SelDate">
}

</td>
<td>@item.SelDate</td>
</tr>
}
</table>

我希望你明白。建立视图模型并查询记录是否存在。在那里你可以确定复选框是否被选中。

最新更新