2013-04-04 55 views
3

我有一个问题给你们。我正在编写一个应用程序,可以创建带有多个答案的练习。前几天我问了一些问题,现在它完全正常工作。ASP.NET MVC,modelstate.isvalid永远不会有效这种方式

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

我认为这只是ID验证失败? – mattytommo 2013-04-04 12:58:51

+0

@mattytommo是的,正好。每当我检查我的模型状态错误。它给了我信息; “AnswerId是必需的”。当我创建一个新的答案时,答案的ID是0。这取决于我的数据库分配一个ID。 – Ibsonic 2013-04-04 13:02:18

+4

在你的视图中输入@ Html.HiddenFor(o => o.ID) – 2013-04-04 13:03:36

回答

1

Got it!谢谢你们的回复。奇怪,但它的作品..我已经有一个隐藏的Id。我有一个只有几个表行的部分。这个,用jQuery在我现有的页面中添加新的答案。

我有;

<input type="hidden" id="[email protected](Model.AnswerId)__Id" class="iHidden" name='Answers[@Model.AnswerId].AnswerId' /> 

因为它创建了一个带有答案的新行。现在我用它来替换它。

@Html.HiddenFor(x=>x.AnswerId, new { @class = "iHidden" }) 

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