无需提交表单如何获取当前DateTime并存储到ASP.NET Core模型属性
功能实现方案
优先推荐:服务端自动赋值(安全、可靠)
这种方式完全不需要用户参与日期填写,也不会出现前端篡改、时区不一致的问题,是最稳妥的实现方式。
操作步骤:
- 删掉前端代码中没用的隐藏日期输入框、日期选择器相关JS代码,清理后前端表单仅保留组名输入框即可:
<input asp-for="Name" type="text" class="form-control" id="inputName" placeholder="Group name">
- 三种服务端赋值方式选一种即可:
- 模型属性默认值赋值
直接在模型定义时给日期属性设置默认值:
// 可选 DateTime.UtcNow 存储UTC时间,避免跨时区业务场景下的日期混乱 public DateTime DateTime { get; set; } = DateTime.Now; public string Name { get; set; }
- 控制器提交时手动赋值
在接口接收表单参数后、写入数据库前手动给日期属性赋值,优先级最高,会覆盖所有前端传入的日期值,彻底避免篡改:
[HttpPost] public IActionResult CreateGroup(你的模型类 model) { if (ModelState.IsValid) { model.DateTime = DateTime.Now; // 此处为EF Core写入数据库逻辑,按需替换为你自己的存储逻辑 _context.Add(model); _context.SaveChanges(); return RedirectToAction("Index"); } return View(model); }
- 数据库层面设置默认值
如果用EF Core,可以在DbContext的OnModelCreating方法中配置字段默认值,写入数据时数据库自动生成日期:
// 数据库为SQL Server用GETDATE(),MySQL用NOW(),PostgreSQL用CURRENT_TIMESTAMP modelBuilder.Entity<你的模型类>() .Property(p => p.DateTime) .HasDefaultValueSql("GETDATE()");
可选方案:前端自动赋值(不推荐)
如果确实需要前端生成日期,可通过JS给隐藏输入框自动赋值,弊端是容易被篡改、时区可能和服务端不一致。
操作步骤:
- 调整前端代码:
<input type="hidden" asp-for="DateTime" class="form-control" id="hiddenDate" /> <input asp-for="Name" type="text" class="form-control" id="inputName" placeholder="Group name"> <script> $(function () { // 自动生成当前日期赋值给隐藏域,按你需要的格式调整即可 const now = new Date(); const formattedDate = `${now.getDate()}/${now.getMonth() + 1}/${now.getFullYear()}`; $('#hiddenDate').val(formattedDate); }); </script>
提示:你现有代码中的日期选择器初始化逻辑绑定的是
#reservationdate元素,当前表单内不存在该元素,这段代码本身就是无效的,两种方案都可以直接删掉。
内容的提问来源于stack exchange,提问作者Mithun CH
相关产品推荐
相关产品推荐

