2013-04-04 28 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" }) 

它現在可以工作。不知道爲什麼,但剃鬚刀完成這項工作。

相關問題