c# - 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?在我的模型中,所有这些字段都是必需的。
解决方案
您不能通过更改控制器内部的任何属性来更改 ModelState.IsValid。IsValid 仍然是相同的,因为错误列表是相同的。应该在模型到达控制器之前分配 UserId。
因此,如果 UserId=0 可以为空,则分配它,并将此行添加到视图表单内的某处,
<input type="hidden" asp-for="@Model.UserId" value="@Model.UserId"/>
推荐阅读
- python-3.x - 如何将包含重复字母的单词还原为其原始英文形式?
- node.js - 按需运行后台 Nodejs docker 服务(通过 Gitlab CI ??)
- llvm - 运行 LLVM 优化器会将 32 位内存访问转换为 64 位。有没有办法避免这种情况?
- asp.net-core-mvc - .NET Core MVC 中文件输入的远程验证
- java - 从 ArrayList 中的 HashMap 获取键和值
- python - Python中的包容性RSS解析?
- typescript - 再次:打字稿函数重载
- css - html部分之间的CSS水平间隙
- symfony - 依赖组件问题
- html - Bootstrap轮播上的背景图像放置