3

我有一个问题要问你们。我正在编写一个应用程序,我可以在其中创建具有多个答案的练习。几天前我问了一些问题,现在它完全有效。

Asp.net MVC with Entity,使用 jquery 将数据传递到 List。不工作

源头已经不一样了。我只有一个关于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永远不会是真的原因。

我怎样才能让它工作?

4

1 回答 1

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" })

它现在有效。不知道为什么,但是,剃须刀可以完成这项工作。

于 2013-04-04T13:16:02.887 回答