我有个问题。我正在编写一个应用程序,我可以用多个答案创建练习。我几天前问了一下,现在它完全有用。
Asp.net MVC with Entity, using jquery to pass data into List. Does not work
来源不再相同了。我只有一个关于modelstate.isvalid
的问题。
让我举个例子。我有一个ExerciseModel
列表答案。使用jQuery和EditorTemplates
动态创建新答案非常完美。唯一的问题是验证现在永远不会有效。我想将modelstate.isvalid
添加到我的httpPost
方法中进行验证。
问题是关于编辑/创建新答案
public ActionResult EditQuestion(int id)
{
ExerciseModel exercisemodel = db.Exercise.Find(id);
if (exercisemodel == null)
{
return HttpNotFound();
}
exercisemodel.Answers = GetAnswers(id);
ViewBag.CourseId = new SelectList(db.Course, "CourseId", "CourseName",
exercisemodel.CourseId);
return View(exercisemodel);
}
[HttpPost]
public ActionResult EditQuestion(ExerciseModel exercisemodel)
{
foreach (var answer in exercisemodel.Answers)
{
db.Entry(answer).State = answer.AnswerId == 0 ?
EntityState.Added :
EntityState.Modified;
}
db.SaveChanges();
return RedirectToAction("Index");
}
之所以如此,是因为我可以创建新的答案,同时我也可以编辑现有答案并将其添加到我ExerciseModel
的答案列表中。因此,当我创建新答案时,我的ExerciseModel
会发生变化。这就是modelstate.isvalid
永远不会成真的原因。
我怎样才能让它发挥作用?
答案 0 :(得分:1)
知道了!谢谢你的回复。奇怪,但它的工作..我已经有一个隐藏的Id。我只有几个表行。这是为了使用jQuery在我现有的页面中添加新的答案。
我有;
<input type="hidden" id="Answers_@(Model.AnswerId)__Id" class="iHidden" name='Answers[@Model.AnswerId].AnswerId' />
因为它会创建一个带答案的新行。现在我用。替换它。
@Html.HiddenFor(x=>x.AnswerId, new { @class = "iHidden" })
它现在有效。不知道为什么,但剃刀做的工作。