[英]Asp.Net MVC. Hot to transmit data from view to controller without dataloss
我對 asp.net 很陌生,目前正在嘗試制作一個表單以將一些數據添加到我的數據庫中。 當我試圖將數據從視圖發送到控制器中的 [HttpPost] 方法時,遺憾的是,由於某種原因,我的 POST 中的所有信息都丟失了。 為了讓您大致了解我的數據結構是什么樣的:我正在開設一門課程,其中包含一個問題對象列表,其中包含一個答案對象列表。 因此,這就是我構建代碼的方式。 調用視圖:
ViewBag.QuestionId = -1;
return View("QuestionForms", _context.Courses.Include(c => c.Questions.Select(q => q.PossibleAnswers)).Single(c => c.Id == course.Id));
這是視圖:
@using System
@using CourseTec.Models
@model CourseTec.Models.Course
@{
ViewBag.Title = "QuestionForms";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("SaveQuestions", "Course"))
{
var index = ViewBag.QuestionId;
if (Model.Questions != null && index != -1)
{
}
else
{
Model.Questions.Add(new Question());
index = Model.Questions.Last().Id;
}
var concreteQuestion = Model.Questions.Find(x => x.Id == index);
var questionIndex = Model.Questions.FindIndex(x => x == concreteQuestion);
<div class="form-group">
@Html.LabelFor(m => Model.Questions[questionIndex].question)
@Html.TextAreaFor(m => Model.Questions[questionIndex].question, new { @class = "form-control" })
</div>
for (int k = 0; k < 4; k++)
{
<div class="form-group">
@Html.LabelFor(m => Model.Questions[questionIndex].PossibleAnswers[k].AnswerString)
@Html.TextAreaFor(m => Model.Questions[questionIndex].PossibleAnswers[k].AnswerString, new { @class = "form-control" })
@Html.CheckBoxFor(m => Model.Questions[questionIndex].PossibleAnswers[k].CorrectAnswer)
</div>
}
@Html.HiddenFor(m => m.Id);
<button type="submit" class="btn btn-primary">Save</button>
}
而這個是提交后調用的ActionResult
[HttpPost]
public ActionResult SaveQuestions(Course course)
{
if (course.Id == 0)
{
return HttpNotFound();
}
else
{
var courseInDb = _context.Courses.Include(i => i.Questions.Select(s => s.PossibleAnswers)).Single(c => c.Id == course.Id);
courseInDb.Questions.Add(course.Questions[0]);
}
_context.SaveChanges();
return View("CourseForms",(_context.Courses.Include(i => i.Questions.Select(s => s.PossibleAnswers)).Single(c => c.Id == course.Id)));
}
有趣的是,可以添加第一個項目而不會丟失數據或任何其他問題,但嘗試添加更多項目會導致此問題。
因此,如果有人能告訴我為什么 ActionResult 方法無法識別或忽略來自 POST 的數據,我會很高興。
問題是Model.Questions[questionIndex]
,起始索引應該從0
而不是1
您應該更正客戶名稱,看起來像這樣
@Html.TextAreaFor(m => Model.Questions[questionIndex].PossibleAnswers[k].AnswerString, new { @class = "form-control", Name = "Questions["+ k + "].PossibleAnswers["+ k + "].AnswerString" })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.