C# NETMVC。将数据从视图传输到控制器而不丢失数据
我是asp.net的新手,目前正在尝试制作一个表单,向我的数据库中添加一些数据。 当我试图将数据从视图发送到控制器中的[HttpPost]方法时,由于某种原因,我的帖子中的所有信息都丢失了。让你大致了解一下我的数据结构是什么样子的:我正在学习一门课程,它包含一系列的问题对象和一系列的答案对象。 因此,这就是我构建代码的方式。 调用视图:C# NETMVC。将数据从视图传输到控制器而不丢失数据,c#,asp.net-mvc,C#,Asp.net Mvc,我是asp.net的新手,目前正在尝试制作一个表单,向我的数据库中添加一些数据。 当我试图将数据从视图发送到控制器中的[HttpPost]方法时,由于某种原因,我的帖子中的所有信息都丢失了。让你大致了解一下我的数据结构是什么样子的:我正在学习一门课程,它包含一系列的问题对象和一系列的答案对象。 因此,这就是我构建代码的方式。 调用视图: ViewBag.QuestionId = -1; return View("QuestionForms", _context.Courses.Include(c
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方法无法识别帖子中的数据或忽略了这些数据,我会很高兴
我想指出,这篇文章似乎是正确的,如我的浏览器中的“网络”选项卡所示:
问题是
模型。问题[questionIndex]
,起始索引应该从0
开始,而不是1
您应该更正客户名称,如下所示
@Html.TextAreaFor(m => Model.Questions[questionIndex].PossibleAnswers[k].AnswerString, new { @class = "form-control", Name = "Questions["+ k + "].PossibleAnswers["+ k + "].AnswerString" })
您可以添加get方法的屏幕截图吗?请发布实际代码,而不是屏幕截图。@3抱歉,我已经发布了。请给我们您的
课程类结构。我不确定索引,因为我的数据库中已经有1个条目,所以1个索引是第2个条目。你能解释一下为什么需要一个名字来修复它吗?默认情况下,它不应该在没有它的情况下工作并将其放入当前模型中,然后将其作为ActionResult的参数返回给控制器吗?只是为了更好地理解。它也适用于@Html.TextAreaFor(m=>Model.Questions[0]。可能的答案[k]。AnswerString,新的{@class=“form control”}
问题是,我总是将[0]元素加载到表单中,而不是我想要编辑的问题。那么有没有一种动态方法来获取[x]在将工作模型作为参数返回给ActionResult时加载到表单的元素?(因为它显然需要[0])
@Html.TextAreaFor(m => Model.Questions[questionIndex].PossibleAnswers[k].AnswerString, new { @class = "form-control", Name = "Questions["+ k + "].PossibleAnswers["+ k + "].AnswerString" })