c# - ASP.NET Core 将输入的时间跨度数据类型强制为 24 小时格式
问题描述
无论我做什么,我都无法让我的输入在时间跨度内显示为 24 小时格式
public class Horario
{
public int Id { get; set; }
[Required]
[DataType(DataType.Time)]
[Display(Name = "Início")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{HH:mm}")]
public TimeSpan Inicio { get; set; }
[Required]
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{HH:mm}")]
public TimeSpan Fim { get; set; }
}
出于某种原因,无论我在格式字符串上写什么,它都会使用 AM/PM 将其呈现为 12h
<div class="card card-body">
<div class="form-group col-3">
<label asp-for="Horario.Inicio" class="control-label"></label>
<input asp-for="Horario.Inicio" class="form-control" />
<span asp-validation-for="Horario.Inicio" class="text-danger"></span>
</div>
<div class="form-group col-3">
<label asp-for="Horario.Fim" class="control-label"></label>
<input asp-for="Horario.Fim" class="form-control" />
<span asp-validation-for="Horario.Fim" class="text-danger"></span>
</div>
</div>
解决方案
当您asp-for
在输入上使用并且支持属性是 aTimeSpan
时,Razor 会将其呈现为带有 的输入type="time"
。“时间”输入类型通常呈现为浏览器控件,并且该浏览器控件将被本地化。基本值是 24 小时格式(如果不是,它实际上甚至不会工作,因为它必须是 ISO),但如果您的设备的文化是 12 小时,那么它就是这样显示的。没有办法解决这个问题,因为它是一个浏览器控件。
如果您真的不希望它像那样显示,那么您唯一的选择就是通过以下方式使用常规的“文本”输入类型:
<input asp-for="Horario.Inicio" type="text" class="form-control" />
然后,它将只是文本(无浏览器控制),并且将显示提供给输入的直接值。但是,您将丢失任何内置验证,当然用户输入时间也不会那么容易。他们可能会犯错误并输入无效的值。您可以通过 JS 添加自己的验证规则,甚至可以创建自己的自定义 JS 输入,但这一切都取决于您。
推荐阅读
- python - 无法更改图表上的刻度频率
- reactjs - React Native Change Functional State inside State 到 Class State inside State
- json - 将数据从 StructA 传递到 VCA,然后从 VCA 传递到 VCB
- python - 如何禁用 FutureWarning:将 (type, 1) 或 '1type' 作为 type 的同义词传递是不推荐使用的警告?
- 64-bit - 如何使用 try-catch 捕获浮点错误?
- r - 对组数据进行分类
- linux - 如何找到固定到同一个核心的多个进程?
- python - 如何在 pandas 数据框列中找到已知值的索引?
- python - python 有时会在运行时重新导入模块吗?
- python - Pyqt 的 Python input() 替代方法,用于从硬件键盘读取字符串