我有一个数据库表,其中包含多个问题行。 因此,当我按下“下一步”时,我会使用此表单从数据库中获取问题。按钮它完美地工作。 但是当我按下'上一页'按钮它将始终转到第一个问题。 我需要这个去上一个问题。 这就是我的表单的样子:
@using (Html.BeginForm("Index", "Exam"))
{
@Html.Hidden("qid", Model.ID, new { @id = "id" })
<table>
<tr>
<td>
@Model.ID
</td>
<td>
@Model.QuestionDes
</td>
</tr>
<tr>
<td>
<p>@Html.RadioButton("Answer1", new { @id = 1 }) @Model.Answer1 </p>
</td>
</tr>
<tr>
<td>
<p>@Html.RadioButton("Answer2", new { @id = 2 }) @Model.Answer2 </p>
</td>
</tr>
<tr>
<td>
<p>@Html.RadioButton("Answer3", new { @id = 3 }) @Model.Answer3 </p>
</td>
</tr>
<tr>
<td>
<p>@Html.RadioButton("Answer4", new { @id = 4 }) @Model.Answer4 </p>
</td>
</tr>
</table>
<input type="submit" value="Next" />
}
@using (Html.BeginForm("PrevIndex", "Exam"))
{
@Html.Hidden("qid1", Model.ID, new { @id = "id1" })
<input value="Prev" type="submit"/>
}
这是我的控制器的样子:
[HttpGet]
public ActionResult Index()
{
IQuestionService ser = new QuestionService();
QuestionLoadDTO q = ser.GetIndividualQuestions(1);
//ViewBag.question = q;
return View(q);
}
[HttpPost]
public ActionResult Index(QuestionLoadDTO ques)
{
int count = 0;
count = int.Parse(Request["qid"].ToString());
count++;
if (count <= 4)
{
IQuestionService ser = new QuestionService();
QuestionLoadDTO q = ser.GetIndividualQuestions(count);
return View(q);
}
return RedirectToAction("Submit");
}
public ActionResult PrevIndex(QuestionLoadDTO ques)
{
int count1 = 0;
count1 = int.Parse(Request["qid1"].ToString());
count1--;
if (count1 < 5 || count1 >= 0)
{
IQuestionService ser = new QuestionService();
QuestionLoadDTO q = ser.GetIndividualQuestions(count1);
//return View(q);
return RedirectToActionPermanent("Index",q);
}
return RedirectToAction("End");
}
public ActionResult Submit()
{
return View();
}
public ActionResult End()
{
return View();
}
这些是我的其他方法:
QuestionLoadDTO IQuestionService.GetIndividualQuestions(int index)
{
IQuestionData ser = new QuestionRepository();
QuestionLoadDTO q = ser.GetIndividualQues(index);
return q;
}
public QuestionLoadDTO GetIndividualQues(int index)
{
Context con = new Context();
Question question = con.Questions.Find(index);//Where(e => e.ID == index).FirstOrDefault();
QuestionLoadDTO dto = new QuestionLoadDTO()
{
ID = question.ID,
QuestionDes = question.QuestionDes,
Answer1 = question.Answer1,
Answer2 = question.Answer2,
Answer3 = question.Answer3,
Answer4 = question.Answer4
};
return dto;
}
有人可以给我一个想法来解决这个问题。提前谢谢!
答案 0 :(得分:0)
使用PrevIndex
更改您的RedirectToActionPermanent
,如下所示返回视图,但索引方法不接受模型值。
return RedirectToActionPermanent("Index",q);
并且您的索引方法不接受任何参数
public ActionResult Index()
所以你需要改变
return RedirectToActionPermanent("Index",q);
要
return View("Index",q);
像这样改变
public ActionResult PrevIndex(QuestionLoadDTO ques)
{
int count1 = 0;
count1 = int.Parse(Request["qid1"].ToString());
count1--;
if (count1 < 5 || count1 >= 0)
{
IQuestionService ser = new QuestionService();
QuestionLoadDTO q = ser.GetIndividualQuestions(count1);
return View("index",q);
}
return RedirectToAction("End");
}
答案 1 :(得分:0)
此
return RedirectToActionPermanent("Index", q)
不会传递q
,因为此方法实际上是客户端重定向。它也会产生GET请求,而你似乎期望调用Index的过载。这也不是一个好主意 - 这个动作对于处理表单帖子是有好处的,让我们保持这样。
我建议进行以下更改:
[HttpGet]
public ActionResult Index(int? qid)
{
int index = qid == null ? 1 : qid;
IQuestionService ser = new QuestionService();
QuestionLoadDTO q = ser.GetIndividualQuestions(index);
//ViewBag.question = q;
return View(q);
}
获取索引操作的重载现在需要加载的问题的可选索引。现在,您可以重复使用此操作来显示您想要的任何问题。
public ActionResult PrevIndex(QuestionLoadDTO ques)
{
int count1 = 0;
count1 = int.Parse(Request["qid1"].ToString());
count1--;
if (count1 < 5 || count1 >= 0)
{
return RedirectToAction("Index", count1);
}
return RedirectToAction("End");
}
无需在此处检索问题,只需使用适当的问题索引重定向到索引。
答案 2 :(得分:0)
这就是我解决它的方式......
public ActionResult PrevIndex(QuestionLoadDTO ques)
{
int count1 = 0;
count1 = int.Parse(Request["qid1"].ToString());
count1--;
if (count1 < 5 || count1 >= 0)
{
IQuestionService ser = new QuestionService();
QuestionLoadDTO q = ser.GetIndividualQuestions(count1);
//return View(q);
return View("Index",q);
}
return RedirectToAction("End");
}
我只需将返回“RedirectToAction”更改为返回视图(“索引”,q).... 现在,当您按下“上一步”按钮时,它会完全移至上一个问题....