首页 > 解决方案 > ModelState.IsValid = False

问题描述

ModelState正在引发错误,其中一个参数[UserId]null. 我的表单上没有设置该字段。它正在控制器中设置。

如何从 ModelState.IsValid 测试中删除它?

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create([Bind("Id,UserId,Created,TimeStamp,Name,Role,Description,Partner,PartnerAmount,Competitor,IsDeleted")] Relationship relationship)
    {
        relationship.UserId = User.Identity.Name.Replace(@"XXXXX\","");
        relationship.Created = DateTime.Now;
        relationship.TimeStamp = DateTime.Now;
        relationship.IsDeleted = false;
        if (ModelState.IsValid)
        {
            _context.Add(relationship);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(relationship);
    }

它不会通过 UserId 的 ModelState.IsValid b/c。但是,它不检查 Created、Timestamp 或 IsDeleted。为什么它不检查这些,但它确实检查了 UserId?在我的模型中,所有这些字段都是必需的。

标签: c#asp.net-mvcasp.net-core

解决方案


您不能通过更改控制器内部的任何属性来更改 ModelState.IsValid。IsValid 仍然是相同的,因为错误列表是相同的。应该在模型到达控制器之前分配 UserId。

因此,如果 UserId=0 可以为空,则分配它,并将此行添加到视图表单内的某处,

<input type="hidden" asp-for="@Model.UserId" value="@Model.UserId"/>

推荐阅读