Razor 如何为DateTime字段使用select下拉列表并维护MVC模型绑定?

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

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-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;
   }                                
}

可以找到时间间隔选择的示例。

为什么不使用“选择标记”帮助器?为什么不使用“选择标记”辅助对象?我明天会测试的!:)我明天会测试的!:)