ASP.NET MVC,modelstate.isvalid从未以这种方式有效

时间:2013-04-04 12:55:43

标签: c# asp.net-mvc entity-framework-5 mvc-editor-templates

我有个问题。我正在编写一个应用程序,我可以用多个答案创建练习。我几天前问了一下,现在它完全有用。

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永远不会成真的原因。

我怎样才能让它发挥作用?

1 个答案:

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

它现在有效。不知道为什么,但剃刀做的工作。