- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 [ImportModelStateFromTempData]
和 [ExportModelStateToTempData]
操作过滤器来实现 PRG 模式。这种模式非常适合平面模型,但当我有一个子系列时我无法让它工作。我的模型如下所示:
public class QuestionModel
{
public string QuestionText { get; set; }
public ICollection<ChoiceModel> Choices { get; set; }
}
public class ChoiceModel
{
public string ChoiceText { get; set; }
}
我的 Controller 如下:
[HttpGet, ImportModelStateFromTempData]
public ActionResult Create()
{
return View();
}
[HttpPost, ExportModelStateToTempData]
public ActionResult Create(QuestionModel model)
{
if(ModelState.IsValid)
{
// not getting here
}
return RedirectToAction("Create");
}
我的 View 允许用户向选项中添加新项目,并且我有一个选项必须是唯一的验证。当我的 ModelState 无效时,它会将 ModelState 打包成 TempData 并重定向到 HttpGet 操作。
此时我所有的子模型值都在 ModelState 中,但它在将模型传递给 View 时不会重建它们,因此我的 View 显示添加了 0 个子模型。
有没有办法以某种方式将 ModelState 与 Model 合并,或者我不能将此模式用于子对象吗?
最佳答案
我怀疑 [ImportModelStateFromTempData]
会从 ModelState
重建模型,我想象它只是获取用户尝试的值 和验证错误,因此由于此时模型集合未初始化 (GET) 并且您未从 POST 传递集合,它只会呈现模型初始状态,这就是为什么它适用于平面模型但不适用于本例中的集合。
因此您必须找到一种方法将该集合或孔模型从 POST 传递到 GET 操作,选项是 TempData。
//POST - if validation fails
TempData["model"] = model;
//GET - must check if TempData["model"] is null first
QuestionModel model = (QuestionModel)TempData["model"];
关于c# - 带子项的 MVC PRG 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14265695/
我有以下 html,它也绑定(bind)到 Bootstrap 弹出窗口(如果有任何区别的话) Layouts test Starts 2014/12/12, 11:
我是一名优秀的程序员,十分优秀!