我已閱讀了大量關於此問題的內容,但我無法弄清楚。ASP.NET MVC DropDownList選定的值問題
我在我的視圖上有一個用於分頁的下拉列表。你選擇你想要去的頁面,然後表單被提交。當視圖返回時,顯示請求的頁面。下拉列表發生變化以反映新顯示的頁面。這工作正常。
我的問題是這樣的: 我有2個提交按鈕,一個用於下一頁,另一個用於上一頁。 在控制器中,如果其中一個提交已被按下,頁面#應該增加或減少1.發生這種情況,並且正在顯示正確的數據頁面。但是,下拉列表不會,無論我做什麼,反映顯示視圖時的新頁碼。
基本上,如果用戶更改了下拉列表,它將在表單提交後發回時反映這些更改。如果我以編程方式更改頁面#,即使顯示正確的數據頁面,下拉列表也不會更改。
下面是操作方法:
public ActionResult Results(TechSearch search, string NextPage, string PrevPage)
{
if (NextPage != null) search.Page++;
if (PrevPage != null) search.Page--;
int resultCount = search.GetResultCount(Desk);
List<int> pages = new List<int>();
int pageCount = (int)Math.Ceiling((decimal)resultCount/search.PageSize);
for (int i = 1; i <= pageCount; i++) pages.Add(i);
ViewData["pages"] = new SelectList(pages, search.Page);
ViewData["pageCount"] = pageCount;
return View(search);
}
這裏是視圖的相關部分:
<input type="submit" value="<" name="PrevPage" />
Page
<%=Html.DropDownList("Page",(SelectList)ViewData["pages"]) %>
of
<%=ViewData["pageCount"]%>
<input type="submit" value=">" name="NextPage" />
請幫助。
編輯
頁333 Pro ASP.NET MVC Framework by Steven Sanderson的:
如何輸入控件得到他們的價值觀
每個[用於渲染輸入控件的HTML助手]的嘗試 填充自身看對於值爲 的以下位置,按此順序 的優先級:
- ViewData.ModelState [「控件名稱」。Value.RawValue
- 值參數傳遞到HTML helper方法,或者你已經稱爲 超載不包括值 參數,然後 的ViewData .Eval(「控件名稱」)
的ModelState是一個臨時存儲區域 該ASP.NET MVC使用保留 傳入試圖值加上結合 和驗證錯誤。請注意, 它位於優先級列表的頂端 ,因此它的值將覆蓋您明確設置的任何內容。這個約定 意味着你可以傳遞一個明確的 值參數作爲幫助者的默認或初始值 ;但是當 在 驗證失敗後重新渲染視圖時,幫助程序將 保留用戶輸入的值優先於 優先於該默認值。
我已驗證ViewData.ModelState [「Page」]。Value。RawValue確實包含令我困擾的意外頁碼。解決此問題的最佳方法是什麼?
+1非常好的使用字符串和模型綁定,使得可讀的解析按鈕被按下。 – 2009-09-16 21:10:05
@丹 - 謝謝。我從史蒂文桑德森的Pro ASP.NET MVC框架中選擇了奇才和多步驟形式部分(第396頁) – 2009-09-17 12:19:44
史蒂文桑德森的書很好。 – RichardOD 2009-09-17 15:23:44