我已阅读了大量关于此问题的内容,但我无法弄清楚。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