2016-02-12 130 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