You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC:Edit视图无法从数据库获取DateTime值求助

ASP.NET Core MVC Edit视图DateTime值无法加载的排查与解决

问题概述

作为ASP.NET Core MVC新手,使用脚手架生成的ActivityItem模型在Index列表和Details视图中能正常显示数据库中的DateTime值,但进入Edit页面时,DateTime值无法从数据库获取。

核心问题定位

你代码里的视图层错误是导致DateTime值无法加载的直接原因:

  • 在Edit视图的DateTime输入框中,错误地使用了@Html.DisplayFor()作为asp-for的参数,asp-for需要直接绑定模型属性,而DisplayFor返回的是格式化后的文本,不是属性引用。
  • 错误代码示例:
<input asp-for="@Html.DisplayFor(a => a.DateCreated)" class="form-control" />
<input asp-for="@Html.DisplayFor(a => a.DatetModified)" class="form-control" />

解决步骤

1. 修复视图中的DateTime输入框

将错误的输入框代码修改为直接绑定模型属性:

<div class="form-group">
    <label asp-for="DateCreated" class="control-label"></label>
    <input asp-for="DateCreated" class="form-control" />
    <span asp-validation-for="DateCreated" class="text-danger"></span>
</div>
<div class="form-group">
    <label asp-for="DatetModified" class="control-label"></label>
    <input asp-for="DatetModified" class="form-control" />
    <span asp-validation-for="DatetModified" class="text-danger"></span>
</div>

2. 验证GET方法的模型数据

你的GET Edit方法代码是正确的,它已从数据库获取完整的ActivityItem对象并传递给视图:

// GET: ActivityItems/Edit/5
public async Task<IActionResult> Edit(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var activityItem = await _context.ActivityItem.FindAsync(id);

    if (activityItem == null)
    {
        return NotFound();
    }

    ViewData["ActivityTypeId"] = new SelectList(_context.ActivityType, "ActivityTypeId", "ActivityTypeName", activityItem.ActivityTypeId);
    return View(activityItem);
}

只要视图绑定正确,activityItem中的DateCreated和DatetModified值就能正常显示。

3. 处理POST方法的DateCreated字段(可选)

如果希望DateCreated字段在编辑时保持只读(通常创建日期无需修改),可以:

  • 将输入框设置为只读:input asp-for="DateCreated" class="form-control" readonly
  • 或者在POST方法中保留原始的创建日期值:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("ActivityItemId,ActivityName,ActivityTypeId,DatetModified,CreatedBy,PC,Live")] ActivityItem activityItem)
{
    if (id != activityItem.ActivityItemId)
    {
        return NotFound();
    }

    // 从数据库获取原始的DateCreated值
    var originalItem = await _context.ActivityItem.FindAsync(id);
    activityItem.DateCreated = originalItem.DateCreated;

    if (ModelState.IsValid)
    {
        try
        {
            _context.Update(activityItem);
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!ActivityItemExists(activityItem.ActivityItemId))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }
        return RedirectToAction(nameof(Index));
    }

    ViewData["ActivityTypeId"] = new SelectList(_context.ActivityType, "ActivityTypeId", "ActivityTypeName", activityItem.ActivityTypeId);
    return View(activityItem);
}

额外排查点

  • 检查模型中的DisplayFormat特性:[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)],这个配置是正确的,确保在编辑模式下应用日期格式。
  • 查看页面源代码,确认输入框的value属性是否被正确渲染;如果修复视图后仍为空,可通过断点调试查看GET方法中activityItem.DateCreated的实际值是否有效。

内容的提问来源于stack exchange,提问作者SND69

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:05:17