Razor 如何为DateTime字段使用select下拉列表并维护MVC模型绑定?
Asp.Net Core MVC scaffolding为我提供了以下HTML,用于输入Razor 如何为DateTime字段使用select下拉列表并维护MVC模型绑定?,razor,asp.net-core-mvc,Razor,Asp.net Core Mvc,Asp.Net Core MVC scaffolding为我提供了以下HTML,用于输入DateTime-字段: <div class="form-group"> <label asp-for="ShiftStarts" class="control-label"></label> <input asp-for="ShiftStarts" class="form-control" /> <span asp-validation-f
DateTime
-字段:
<div class="form-group">
<label asp-for="ShiftStarts" class="control-label"></label>
<input asp-for="ShiftStarts" class="form-control" />
<span asp-validation-for="ShiftStarts" class="text-danger"></span>
</div>
。。。这很好,但我真正关心的是时间,而不是日期,我想用一个下拉列表来替换它,该下拉列表只包含一组预设时间(例如06:00、06:15、06:30等)
我想我必须这样做:
<select asp-for="ShiftStarts" class="form-control">
<option disabled value="0">- choose a time -</option>
@for (int hh = 0; hh < 24; hh++)
{
for (int mm = 0; mm < 4; mm++)
{
int m = mm * 15;
<option value="/* what goes here? */">
@hh.ToString("D2"):@m.ToString("D2")
</option>
}
}
</select>
-择时-
@对于(int-hh=0;hh<24;hh++)
{
用于(int mm=0;mm<4;mm++)
{
int m=mm*15;
@hh.ToString(“D2”):@m.ToString(“D2”)
}
}
如何实现这一点并使模型绑定也能工作?您不应该在视图页面中手动生成这样的选项列表。尝试在viewmodel类中使用
IEnumerable
属性,该属性返回基于预设间隔的时间列表,如下例所示:
public IEnumerable<SelectListItem> ListOfTimeIntervals
{
get
{
var list = new List<SelectListItem>();
// range of hours, multiplied by 4 (e.g. 24 hours = 96)
int timeRange = 96;
// range of minutes, e.g. 15 min
int minuteRange = 15;
// starting time, e.g. 0:00
TimeSpan startTime = new TimeSpan(0, 0, 0);
// placeholder
list.Add(new SelectListItem { Text = "Choose a time", Value = "0", Disabled = true });
// get standard ticks
DateTime startDate = new DateTime(DateTime.MinValue.Ticks);
// create time format based on range above
for (int i = 0; i < timeRange; i++)
{
int minutesAdded = minuteRange * i;
TimeSpan timeAdded = new TimeSpan(0, minutesAdded, 0);
TimeSpan tm = startTime.Add(timeAdded);
DateTime result = startDate + tm;
list.Add(new SelectListItem { Text = result.ToString("HH:mm"), Value = result.ToString("HH:mm") });
}
return list;
}
}
可以找到时间间隔选择的示例。您不应该像这样在查看页面中手动生成选项列表。尝试在viewmodel类中使用
IEnumerable
属性,该属性返回基于预设间隔的时间列表,如下例所示:
public IEnumerable<SelectListItem> ListOfTimeIntervals
{
get
{
var list = new List<SelectListItem>();
// range of hours, multiplied by 4 (e.g. 24 hours = 96)
int timeRange = 96;
// range of minutes, e.g. 15 min
int minuteRange = 15;
// starting time, e.g. 0:00
TimeSpan startTime = new TimeSpan(0, 0, 0);
// placeholder
list.Add(new SelectListItem { Text = "Choose a time", Value = "0", Disabled = true });
// get standard ticks
DateTime startDate = new DateTime(DateTime.MinValue.Ticks);
// create time format based on range above
for (int i = 0; i < timeRange; i++)
{
int minutesAdded = minuteRange * i;
TimeSpan timeAdded = new TimeSpan(0, minutesAdded, 0);
TimeSpan tm = startTime.Add(timeAdded);
DateTime result = startDate + tm;
list.Add(new SelectListItem { Text = result.ToString("HH:mm"), Value = result.ToString("HH:mm") });
}
return list;
}
}
可以找到时间间隔选择的示例。为什么不使用“选择标记”帮助器?为什么不使用“选择标记”辅助对象?我明天会测试的!:)我明天会测试的!:)