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

ASP.NET中ViewModel列表回传控制器时为NULL的问题咨询

问题分析与解决方案

Hey there! Let's break down why your List<Case> properties are coming back null when you return the view after hitting a duplicate CaseId error.

根本原因:模型绑定机制限制,和依赖注入无关

ASP.NET MVC的模型绑定只会解析HTTP请求里携带的表单数据来重建你的CaseInputModel对象。你的视图只是通过foreach循环渲染了TopTenList的内容,但这些内容并没有被放在<input>、<select>这类表单控件里——也就是说,用户提交表单时,浏览器根本不会把TopTenList或RegularCaseList的数据发送回服务器,所以这些列表自然就是null。

依赖注入在这里完全不相关:你注入的ApplicationDbContext是用来在控制器里获取数据的工具,和POST请求时的模型绑定流程没有交集。

快速修复方案

既然列表数据本来就来自数据库,我们不需要让客户端回传这些数据,最合理的做法是在POST方法返回视图前,重新加载列表:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(CaseInputModel inputs)
{
    if (DbContext.Cases.Any(m => m.CaseId == inputs.NewCase.CaseId))
    {
        inputs.ErrorMessage = "Error: Case ID already exists";
        // 重新初始化需要显示的列表数据
        inputs.SetTopTenList(DbContext);
        // 如果RegularCaseList也需要在视图中展示,同样在这里重新加载
        // inputs.RegularCaseList = DbContext.Cases.Where(...).ToList();
        return View(inputs);
    }

    // 正常创建Case的逻辑...
}

额外小提醒:模型验证的潜在问题

我注意到你的Case类里有个可能的错误:

[Required]
[RegularExpression("[^0-9]")]
public int Id { get; set; }

[RegularExpression("[^0-9]")]要求字段不能包含数字,但Id是int类型——这会导致这个字段永远验证失败,因为int只能是数字。如果这不是你的预期,建议修正或移除这个正则表达式属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:22:27