递增和递减查询字符串参数
本文关键字:字符串 参数 查询 | 更新日期: 2023-09-27 18:34:29
在我当前的MVC项目中(我在同一项目中提出的第三个问题!(,我有一个"登录页面",单击按钮后重定向到以下页面URL:
localhost:111111/AccountsFinance/Index?questionId=1
我可以手动编辑 URL 并更改 Id=2,这确实会更改显示的内容,但我当然需要一个按钮来执行此操作。
在此视图中,我有以下几点:
@using (Html.BeginForm("Index", "AccountsFinance", FormMethod.Post))
{
//SOME CODE
<input class="btn btn-success" type="submit" value="Back" />
<input class="btn btn-success" type="submit" value="Next" />
}
这是我的控制器代码,不确定这个问题是否必要,但包含它总比不包含更好!
public AccountsFinanceQuestion afqList = new AccountsFinanceQuestion();
public ActionResult Index(string ans)
{
int qId = int.Parse(Request.QueryString["questionId"]);
using (S3WEntities1 ent = new S3WEntities1())
{
afqList.Question = ent.Questions.Where(w => w.QuQuestionId == qId).Select(s => s.QuQuestion).FirstOrDefault().ToString();
afqList.Answers = ent.Answers.Where(w => w.AnsQuestionId == qId).Select(s => s.AnsAnswer).ToList();
}
return View("Index", afqList);
}
那么我将如何增加/减少查询字符串的 questionId=X 部分,以便它移动到下一个问题/上一个问题。这一切都在同一控制器上同一方法的同一视图中。我也明白,如果用户点击返回,这对于第一个问题可能不太有效,因为 URL 完全不同,但这是以后要讨论的事情。
首先,您不需要手动解析查询字符串参数 - 默认绑定器将为您完成。只需使用相应的名称定义方法参数即可。例如
public ActionResult Index(int questionId)
其次,似乎您正在审查某些问题的细节。因此,我认为指数不是适当的行动。我建议使用详细信息或编辑:
public ActionResult Details(int questionId)
关于指向下一个和上一个问题的链接 - 您可以在视图中生成操作链接:
@Html.ActionLink("Back", "Details", new { questionId = Model.QuQuestionId - 1 }
@Html.ActionLink("Next", "Details", new { questionId = Model.QuQuestionId + 1 })
另请注意,您的方法有几个问题:
- 如果某些问题被删除并且 ID 不再增量怎么办?
- 如果当前问题的 id = 1,即它是第一个问题怎么办?它不应该链接到上一个问题
- 如果当前问题是最后一个怎么办?
解决这些问题的最简单方法 - 将上一个和下一个问题的 ID 传递到您的视图中。您可以为此使用模型属性,也可以使用 ViewBag
:
ViewBag.PrevQuestionId = ent.Questions
.Where(q => q.QuQuestionId < questionId)
.OrderByDescending(q => q.QuQuestionId)
.Select(q => q.QuQuestionId)
.FirstOrDefault();
然后在视图中,您可以有条件地添加指向上一个问题的链接:
@if (ViewBag.PrevQuestionId > 0) {
@Html.ActionLink("Back", "Details", new { questionId = ViewBag.PrevQuestionId }
}
与下一个问题相同
您可以在控制器中执行以下操作:
int qId = int.Parse(Request.QueryString["questionId"]);
Response.RedirectToRoute("current-route?questionId=" + qId++);