我遇到this问题中描述的完全相同的问题。我的观点没有在我的控制器中提供一些数据。所以在我验证ModelState之前的控制器中我手动重新分配该值。然后,当我尝试更新ModelState时,它显示错误'The model of type /*my model*/ could not be updated.'
这是控制器:
public ActionResult CreateEntry(NewEntryViewModel model)
{
model.SexList = new SelectList(_newEntryService.GetSexList(), "Key", "Value");
model.DoctorList = new SelectList(_refDocService.GetDocList(), "Key", "Value");
model.TestList = _testService.GetAllTests();
model.Patient.Serial = _newEntryService.GenerateSerial();
//ModelState["TestList"].Errors.Clear();
//ModelState.Remove("TestList");
UpdateModel(model); //error shows here
var errors = ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => new { x.Key, x.Value.Errors })
.ToArray();
if (!ModelState.IsValid)
{
//do something
return View("NewEntry", model);
}
return RedirectToAction("NewEntry");
}
我已经尝试过那些已注释掉的行,每一行都是一次。但错误仍然显示。这就是我在顶部给出的问题中找到的解决方案。那怎么解决呢? btw TestList只是像public IEnumerable<Admin_Test> TestList { get; set; }
答案 0 :(得分:-1)
所以我终于找到了解决方案,但我不推荐它。我不需要更新modelstate,我只需要从modelstate字典中删除错误。所以我只使用了ModelState.Remove("TestList");
。我这样做是因为TestList
不是任何需要验证的域类的一部分。我没有将@Html.DropDownListFor
用于TestList
,也没有在ViewModel类中使用任何[Required]
或任何其他类型的属性。我只在域类中使用了属性。所以我甚至不知道为什么TestList
在视图中呈现data-val
属性(这可能导致ModelState尝试验证它)。我确信,我强行从ModelState字典中删除了这个验证。