ASP.NET Core控制器传日期值到Create视图无法显示如何解决?
问题原因
HTML5原生type="date"类型的输入框,要求传入的value属性必须为yyyy-MM-dd的ISO标准日期格式,你当前输出的dd.MM.yyyy格式不符合浏览器的识别规则,因此不会展示内容。
另外asp-for标签助手在绑定DateTime类型字段时,会自动生成符合要求的格式,但前提是你直接给视图绑定的模型属性赋值,而非通过ViewData传值,ViewData传值时不会自动做格式转换。
解决方法
方案1(推荐,符合MVC规范)
直接给Create视图绑定的模型属性赋值,不需要用ViewData传值,控制器代码修改如下:
var item = _context.Buchungen .OrderBy(p => p.Id) .LastOrDefault(); // 初始化视图绑定的模型,假设模型类为Buchungen var newBuchung = new Buchungen(); if (item != null) { newBuchung.Bankbeleg = item.Bankbeleg; newBuchung.Belegnummer = item.Belegnummer + 1; newBuchung.Datum = item.Datum.Value; } // 把模型传入视图 return View("Create", newBuchung);
视图中不需要手动写value属性,asp-for会自动处理格式,简化后的视图代码:
<div class="form-group"> <label asp-for="Belegnummer" class="control-label"></label> <input type="text" asp-for="Belegnummer" class="form-control" /> <span asp-validation-for="Belegnummer" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Datum" class="control-label"></label> <input type="date" asp-for="Datum" class="form-control" /> <span asp-validation-for="Datum" class="text-danger"></span> </div>
方案2(保留ViewData的修改方式)
给ViewData赋值时手动指定ISO标准日期格式,控制器代码修改:
ViewData["Datum"] = item.Datum.Value.ToString("yyyy-MM-dd");
如果修改后还是不显示,说明asp-for自动生成的value覆盖了你写的属性,可以把输入框的asp-for替换为name属性:
<input type="date" name="Datum" class="form-control" value="@ViewData["Datum"]" />
内容的提问来源于stack exchange,提问作者Paul_412
相关产品推荐
相关产品推荐

