Razor Server中表单绑定的DateTime类型字段值无法修改问题
问题原因
datetime-local 类型的HTML输入框对值的格式有严格要求,必须符合 yyyy-MM-ddTHH:mm 的ISO 8601格式标准。你当前直接绑定 DateTime? 类型的属性时,Razor默认的转换格式和输入框要求的格式不匹配,导致输入完成后绑定逻辑无法识别输入值,就会重置为默认的属性值。
解决方案
直接修改日期时间输入框的绑定代码,额外指定绑定的格式即可,修改后的代码如下:
<div class="form-group"> <label for="Starttime" class="control-label">Kezdési idő</label> <input form="Starttime" class="form-control" type="datetime-local" @bind-value="@task.Starttime" @bind-value:format="yyyy-MM-ddTHH:mm"/> </div>
如果你的项目使用的是.NET 5及更早版本,也可以换用手动绑定的写法:
<input form="Starttime" class="form-control" type="datetime-local" value="@task.Starttime?.ToString("yyyy-MM-ddTHH:mm")" @onchange="@(e => task.Starttime = DateTime.TryParse(e.Value?.ToString(), out var dt) ? dt : null)"/>
补充说明
如果你的Starttime属性存储的是UTC时间,绑定前需要转换为本地时间避免显示偏差,可以把绑定部分调整为:
<input form="Starttime" class="form-control" type="datetime-local" @bind-value="@task.Starttime.Value.ToLocalTime()" @bind-value:format="yyyy-MM-ddTHH:mm"/>
验证说明
修改完成后刷新页面测试,日期时间字段的输入值会按照指定格式和模型属性正常双向绑定,不会再出现自动重置的问题,也不会影响其余字段的原有绑定逻辑。
内容的提问来源于stack exchange,提问作者Tibor Joós
相关产品推荐
相关产品推荐

