修改后无法更新ModelState

时间:2018-05-30 16:07:45

标签: c# asp.net-mvc

我遇到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; }

这样的域类的IEnumerable

1 个答案:

答案 0 :(得分:-1)

所以我终于找到了解决方案,但我不推荐它。我不需要更新modelstate,我只需要从modelstate字典中删除错误。所以我只使用了ModelState.Remove("TestList");。我这样做是因为TestList不是任何需要验证的域类的一部分。我没有将@Html.DropDownListFor用于TestList,也没有在ViewModel类中使用任何[Required]或任何其他类型的属性。我只在域类中使用了属性。所以我甚至不知道为什么TestList在视图中呈现data-val属性(这可能导致ModelState尝试验证它)。我确信,我强行从ModelState字典中删除了这个验证。