2017-04-25 52 views
0

我使用MVC 5,C#和与另一个模型(ClassTestQuestionMc)相关的模型(ClassTestQuestion)的剃刀。MVC上提交空对象回控制器

我检查一些复选框,当我按控制器中的提交按钮(完成)时,我得到空对象。 我怎样才能找回结果?

在View:

@model IEnumerable<OnlineLearningMVC.Models.ClassTestQuestion> 

    @using (Html.BeginForm("FinishTest", "ClassTestQuestions", FormMethod.Post)) 
    { 
     @Html.AntiForgeryToken() 




     foreach (var item in Model) 
     { 
     @Html.DisplayFor(model => item.QuestionTx) 
      @Html.HiddenFor(model => item.Id) 
      @Html.HiddenFor(model => item.QuestionTx) 
     <br/> 
     <br /> 
     foreach (var Question in item.ClassTestQuestionMc) 
      { 
      @Html.DisplayFor(model => Question.AnswerTx) 
       @Html.HiddenFor(model => Question.AnswerTx) 
      @Html.CheckBoxFor(model => Question.IsChecked) 
       @Html.HiddenFor(model => Question.IsChecked) 


      } 

    } 


     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="FinishTest" class="btn btn-default" /> 
      </div> 
     </div> 

在控制器:

public ActionResult ClassCourseTest(int IdCourse) 
     { 
      var classTestQuestions = db.ClassTestQuestions.Include(c=>c.ClassTestQuestionMc).Include(c => c.ClassTest).Where(i=>i.ClassTestId== IdCourse); 
      return View("ClassCourseTest", classTestQuestions.ToList()); 
     } 

    [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult FinishTest(ClassTestQuestion classTestQuestion) 
     { 
return View(classTestQuestion); 
     } 

我ClassTestQuestion型号:

namespace OnlineLearningMVC.Models 
{ 
    public class ClassTestQuestion 
    { 
     public int Id { set; get; } 


     public int ClassTestId { set; get; } 

     public virtual ClassTest ClassTest { set; get; } 

     [Required] 
     [DisplayName("Question")] 
     public string QuestionTx { set; get; } 
     [Required] 
     [DisplayName("Order")] 
     public int OrderInt { get; set; } 



     [DisplayName("Disabled")] 
     public bool IsDeleted { set; get; } 

     public string CreatedFrom { set; get; } 

     public DateTime CreatedDate { set; get; } 

     public string UpdatedFrom { set; get; } 

     public DateTime UpdatedDate { set; get; } 

     public virtual ICollection<ClassTestQuestionMc> ClassTestQuestionMc { set; get; } 
    } 

我ClassTestQuestionMc型号:

namespace OnlineLearningMVC.Models 
{ 
    public class ClassTestQuestionMc 
    { 

     public int Id { set; get; } 

     public int ClassTestQuestionId { set; get; } 

     public virtual ClassTestQuestion ClassTestQuestion { set; get; } 

     [Required] 
     public string AnswerTx { set; get; } 

     [DisplayName("Is Correct Answer?")] 
     public bool IsCorrectAnswer { set; get; } 

     public bool IsChecked { set; get; } 

     [DisplayName("Disabled")] 
     public bool IsDeleted { set; get; } 

     public string CreatedFrom { set; get; } 

     public DateTime CreatedDate { set; get; } 

     public string UpdatedFrom { set; get; } 

     public DateTime UpdatedDate { set; get; } 
    } 

enter image description here

我在浏览器中看到的内容: enter image description here

编辑

我尝试改变的IEnumerable: enter image description here

+0

您的模型在视图中是@model IEnumerable 但您期望在后操作中使用ClassTestQuestion?它没有任何意义。 – wannadream

+0

那么你提出什么解决方案? – marios

+0

如果模型在视图中是IEnumerable ,那么动作也应该期待它,'FinishTest(IEnumerable )'。 MVC将为您处理该列表。 – wannadream

回答

0

变化的ICollection到IList中的ClassTestQuestionMc。然后你需要遵循这里的数组名称约定来使MVC工作来处理视图模型。

foreach (int i = 0; i < Model.Count; i++) 
{ 
    @Html.DisplayFor(model => Model[i].QuestionTx) 
    @Html.HiddenFor(model => Model[i].Id) 
    @Html.HiddenFor(model => Model[i].QuestionTx) 
    <br/> 
    <br/> 
    foreach (int j = 0; j < Model[i].ClassTestQuestionMc; j++) 
    { 
     @Html.DisplayFor(model => Model[i].ClassTestQuestionMc[j].AnswerTx) 
     @Html.HiddenFor(model => Model[i].ClassTestQuestionMc[j].AnswerTx) 
     @Html.CheckBoxFor(model => Model[i].ClassTestQuestionMc[j].IsChecked) 
     @Html.HiddenFor(model => Model[i].ClassTestQuestionMc[j].IsChecked) 
    } 
} 
相关问题