【发布时间】:2018-05-04 08:54:56
【问题描述】:
当我发布并收到模型时,此模型包含错误。 我通过以下方式删除这些错误。
if (!ModelState.IsValid)
{
int pos = 0;
while (pos < ModelState.Keys.Count())
{
if (ModelState[ModelState.Keys.ElementAt(pos)].Errors.Any())
{
ModelState[ModelState.Keys.ElementAt(pos)].Errors.Clear();
}
pos++;
}
}
bool mod = ModelState.IsValid;
当我在 bool 中执行 while 的过程时,我有一个 true,即我的模型是有效的。 在此过程之后,我按以下方式保留模型。
reg x = _context.register.Create();
x = _context.register.Add(data);
try
{
_context.SaveChanges();
}
catch (DbEntityValidationException e)
{
foreach (var eve in e.EntityValidationErrors)
{
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
eve.Entry.Entity.GetType().Name, eve.Entry.State);
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
ve.PropertyName, ve.ErrorMessage);
}
}
throw;
}
我不明白,每当我继续输入 catch 时清理了 ModelState 的错误,并且我看到了我之前理论上清理过的模型的错误字段。 为什么?
【问题讨论】:
-
ModelState在 POST 方法中绑定模型时会产生错误。仅删除错误消息不会更改模型的状态 - 您的值仍然无效,因此当您保存到数据库时,您会得到一个DbEntityValidationException -
发生验证错误后,您没有使用
ModelState.Clear()方法,这就是验证问题仍然存在的原因。清除验证消息并没有帮助,因为它只是禁止查看它们,而不是更改任何传递给实体模型的值。
标签: c# asp.net-mvc entity-framework asp.net-mvc-5 modelstate