簡體   English   中英

ASP.NET MVC。 熱將數據從視圖傳輸到控制器而不會丟失數據

[英]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 的數據,我會很高興。

我想指出,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM