我正在尝试通过使用[ImportModelStateFromTempData]
and[ExportModelStateToTempData]
操作过滤器来实现 PRG 模式。这种模式适用于平面模型,但当我有一个子集合时,我无法让它工作。我的模型如下所示:
public class QuestionModel
{
public string QuestionText { get; set; }
public ICollection<ChoiceModel> Choices { get; set; }
}
public class ChoiceModel
{
public string ChoiceText { get; set; }
}
我的控制器如下:
[HttpGet, ImportModelStateFromTempData]
public ActionResult Create()
{
return View();
}
[HttpPost, ExportModelStateToTempData]
public ActionResult Create(QuestionModel model)
{
if(ModelState.IsValid)
{
// not getting here
}
return RedirectToAction("Create");
}
我的视图允许用户向选项添加新项目,并且我验证选项必须是唯一的。当我的 ModelState 无效时,它会将 ModelState 打包成 TempData 并重定向到 HttpGet 操作。
此时我的所有子模型值都在 ModelState 中,但是在将模型传递给视图时它不会重建它们,因此我的视图显示添加了 0 个子模型。
有没有办法以某种方式将 ModelState 与 Model 合并,或者我不能将此模式与子对象一起使用?