ASP.. NET MVC, modelstate.Isvalid永远不会以这种方式有效

本文关键字:有效 方式 永远 MVC NET modelstate Isvalid ASP | 更新日期: 2023-09-27 18:07:28

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

Asp.net MVC与实体,使用jquery传递数据到列表。不工作

源不再相同。关于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永远不会为真。

我怎样才能使它工作?

ASP.. NET MVC, modelstate.Isvalid永远不会以这种方式有效

明白了!谢谢大家的回复。很奇怪,但它有效…我已经有了一个隐藏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" })

它现在工作了。不知道为什么,不过剃刀能帮上忙。