2016-02-12 66 views
0

在我目前的MVC项目(!第三个问题我问过这个同一项目),我有一个“着陆页”,这后一个按钮的点击重定向到以下页面网址:递增和递减querystring参数?

本地主机: 111111/AccountsFinance /指数?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" /> 
} 

这里是我的控制器代码,不知道是否有必要对这个问题,但最好包括比不!

​​3210

那么我将如何递增/递减的questionId = X查询字符串的一部分,使得它移动到下一个问题/前面的问题。对于同一个控制器上的相同方法,这一切都是相同的。我也明白,这可能不会对第一个问题的工作这么好,如果用户点击回来,因为URL是完全不同的,但是这是值得一上来就在以后的日子。

+0

你的问题不清楚不是我。你在查询中询问'qID + 1'吗? – kayess

回答

2

首先,你不需要手动解析查询字符串参数 - 默认粘合剂会做给你。只需定义具有相应名称的方法参数。例如。

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 } 
} 

与下一个问题同

-1

你可以做这样的事情在你的控制器:

所有的
int qId = int.Parse(Request.QueryString["questionId"]); 
Response.RedirectToRoute("current-route?questionId=" + qId++); 
+2

你不应该访问或解析查询字符串。 MVC行动应该简单地接受一个int。 – Liam

+0

为什么?我没有任何模型..我只是想增加它.. – Vnuuk

+0

相信我,你做错了,如果你使用底层的请求对象。 MVC模式中控制器的全部要点是将基础对象从等式中抽象出来。例如,你将如何测试以上?! – Liam