如何将TimeSpan与“ hh:mm”进行匹配?

时间:2018-12-06 10:01:34

标签: c# drop-down-menu asp.net-core-mvc

我的问题分为A和B。

在我的视图模型中,我正在定义要传递给视图中下拉菜单的可选时间,如下所示:

public List<string> SelectableTimes => new List<string>
{
    "00:00", "00:15", "00:30" //, ... and so on.
};

...并像这样显示它们:

<select asp-for="TimeFrom" 
    asp-items="@(new SelectList(Model.SelectableTimes, Model.TimeFrom))">
</select>

模型的TimeFrom属性是TimeSpan

public TimeSpan TimeFrom { get; set; }

问题A)如何在下拉菜单中选择正确的时间?始终选择第一个选项(00:00)。

如果我将SelectableTimes更改为包含秒,从而改变了问题A的前提,如下所示:

public List<string> SelectableTimes => new List<string>
{
    "00:00:00", "00:15:00", "00:30:00" //, ... and so on.
};

...它可以工作,但是我不想在下拉列表中显示秒。

问题B)?可以格式化秒吗?我尝试添加.ToString(@"hh\:mm"),但秒数仍在显示:

<select asp-for="TimeFrom" 
    asp-items="@(new SelectList(Model.SelectableTimes, Model.TimeFrom.ToString(@"hh\:mm")))">
</select>

1 个答案:

答案 0 :(得分:0)

请尝试以下解决方案:

public class TimeVM
{
    public List<TimeSpanVM> SelectableTimes => new List<TimeSpanVM>()
                {
                       new TimeSpanVM{Value = new TimeSpan(0, 0, 0) , Label = new TimeSpan(0, 0, 0).ToString("hh\\:mm")},
                       new TimeSpanVM{Value = new TimeSpan(0, 15, 0) , Label = new TimeSpan(0, 15, 0).ToString("hh\\:mm")},
                       new TimeSpanVM{Value = new TimeSpan(0, 30, 0) , Label = new TimeSpan(0, 30, 0).ToString("hh\\:mm")}
                };

    public TimeSpan TimeFrom { get; set; } = new TimeSpan(0, 15, 0);

}

public class TimeSpanVM
{
    public TimeSpan Value { get; set; }
    public string Label { get; set; }
}

查看:

<div class="row">
    <div class="col-md-4">
        <form asp-action="CreateTimeVM">
            <select asp-for="TimeFrom"
                    asp-items="@(new SelectList(Model.SelectableTimes,"Value", "Label" , Model.TimeFrom))"></select>   

            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </form>
    </div>
</div>
相关问题