【发布时间】:2020-07-12 02:29:28
【问题描述】:
在 MVC 应用程序中,我有一个试题列表,我想在同一页面上向用户展示其中的一小部分,但每个答案都可以单独提交。 所以我的页面看起来像这样......
查看代码是....
@model List<QuestionResponseVM>
@for (int i = 0; i < Model.Count(); i++)
{
using (Html.BeginForm("CheckQuestions", "Checks", FormMethod.Post, new {questResponses = Model[i] }))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model[i].QuestionID)
<tr>
<td width="35%">
@Html.Raw(Model[i].QuestionText)
@Html.HiddenFor(model => model[i].QuestionText)
</td>
<td>
@Html.TextAreaFor(model => model[i].Response, new { @name = "DisplayTextEdit", @id = "DisplayTextEdit", @rows = 1, @cols = 80 })
</td>
<td width="30%">
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
</div>
</td>
</tr>
}
}
我的问题是我只能将数据返回到问题 1 的 POST 方法。
这是控制器代码....
public class ChecksController : Controller
{
public ActionResult CheckQuestions()
{
return View(LoadQuestions());
}
// POST: Checks
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CheckQuestions(List<QuestionResponseVM> questResponses)
{
List<QuestionResponseVM> testList = new List<QuestionResponseVM>();
if (ModelState.IsValid)
{
testList = LoadQuestions(questResponses[0].QuestionID, questResponses[0].Response);
}
return View(testList);
}
private List<QuestionResponseVM> LoadQuestions (int _QuestionID = -1, string _Response = "")
{
List<QuestionResponseVM> thisList = new List<QuestionResponseVM>();
thisList.Add(new QuestionResponseVM()
{
QuestionID = 1,
QuestionText = "Question 1",
Response = (_QuestionID == 1 ? _Response : "")
});
thisList.Add(new QuestionResponseVM()
{
QuestionID = 2,
QuestionText = "Question 2",
Response = (_QuestionID == 2 ? _Response : "")
});
thisList.Add(new QuestionResponseVM()
{
QuestionID = 3,
QuestionText = "Question 3",
Response = (_QuestionID == 3 ? _Response : "")
});
return thisList;
}
}
-
如果控制器 POST 方法有一个 QuestionResponseVM questResponses 参数,这是我所期待(希望)的,那么无论单击哪个“保存”按钮,视图都会返回 null。 p>
-
但是,如果我将参数更改为列表(即 List
questResponses ),则问题 1 的“保存”按钮会返回一个包含单个项目和正确数据的列表。但是,任何其他“保存”按钮(例如问题 2 或问题 3)都会返回一个空列表。
场景 1. 的行为对我来说似乎违反直觉,因为“开始表单”设置为返回单个模型项(模型的实例),即“模型 [i]”。
在场景 2 中,我只是不明白为什么它适用于第一个表单(“保存”按钮)但不适用于其他表单。
我认为我不需要使用 JScript 或 AJAX 来执行此操作。
但很明显,我不是在这里“连接一些点”。
有人可以解释一下我观察到的行为,或许可以推动我朝着正确的方向前进以满足这一要求。
如果有任何帮助,我将不胜感激。
【问题讨论】:
-
最好使用ajax提交表单,而ajax每次提交后不会刷新页面
标签: c# asp.net-mvc webforms