当我尝试在post方法中读取HiddenFor Helpers中的值时,我得到类型' System.NullReferenceException'的异常。 (附加信息:对象引用未设置为对象的实例.id当前上下文中不存在名称' id')。为什么会这样,我怎么读这些?我得到异常的行被评论。
作为我申请的一部分,我需要为学生实施问卷调查,包括他们所参加的科目的一般问题和问题。这是控制器的代码:
public class StudentController : Controller
{
private EFDbContext context;
private String index;
public StudentController(string Index = "II-2/10")
{
context = new EFDbContext();
this.index = Index;
}
// GET: Student
public ViewResult Student()
{
Student student = context.Students.Single(i => i.Index.Equals(index));
List<Question> questions = context.Questions.ToList();
StudentVM model = new StudentVM(student,questions);
return View(model);
}
[HttpPost]
public ActionResult Student(StudentVM model)
{
foreach(SubjectVM subject in model.Subjects)
{
foreach(QuestionVM question in subject.Questions)
{
Results results = new Results();
if(subject.Name == null)
{
**//EXCEPTION IS HERE!**
results.Question = context.Questions.SingleOrDefault(q => q.ID == question.ID).Text;
}
else
{
results.Subject = context.Subjects.SingleOrDefault(s => s.ID == subject.ID).Name;
//getting ID of appropriate question in database
int questionID = (question.ID - (int)subject.ID) / (int) Math.Pow(10, subject.ID.ToString().Length);
results.Question = context.Questions.SingleOrDefault(q => q.ID == questionID).Text;
}
results.Answer = context.PossibleAnswers.Single(ans => ans.ID == question.SelectedAnswer).Text;
context.Results.Add(results);
}
}
context.SaveChanges();
return View("Completed", model);
}
}
并查看:
@model Questionnaire.Domain.Models.StudentVM
@{
ViewBag.Title = "Student";
}
@using (Html.BeginForm())
{
for (int i = 0; i < Model.Subjects.Count; i++)
{
@Html.HiddenFor(m => m.Subjects[i].ID)
<h3>@Html.DisplayFor(m => m.Subjects[i].Name)</h3> // display empty string if no name
for (int j = 0; j < Model.Subjects[i].Questions.Count; j++)
{
<div class="well">
@Html.HiddenFor(m => m.Subjects[i].Questions[j].ID)
<h3>@Html.DisplayFor(m => m.Subjects[i].Questions[j].Text)</h3>
@foreach (var answer in Model.Subjects[i].Questions[j].PossibleAnswers)
{
<div>
@Html.RadioButtonFor(m => m.Subjects[i].Questions[j].SelectedAnswer, answer.ID, new { id = answer.ID })
<label for="@answer.ID">@answer.Text</label>
</div>
}
@Html.ValidationMessageFor(m => m.Subjects[i].Questions[j].SelectedAnswer)
</div>
}
}
<input type="submit" class="btn btn-success" value="Confirm" />
}
答案 0 :(得分:1)
我发现了错误,这很容易。
if(subject.Name == null)
{
**//EXCEPTION IS HERE!**
results.Question = context.Questions.SingleOrDefault(q => q.ID == question.ID).Text;
}
问题在于
subject.Name == null
因为我没有将subject.Name从view发布到post方法。当我将其更改为
时subject.ID == null
一切都很好。