我有这个下拉列表
@Html.DropDownList("pageSize",
new SelectList(ViewBag.ListItems, "pageSize"), "pageSize",
new
{
onchange = @"
var form = document.forms[0];
form.action='Home/Index';
form.method='POST';
form.submit();"
})
基于以下ViewBag
ViewBag.ListItems = new List<Int16>
{
5,
20,
50,
100
};
所有这些都放在我的家庭控制器中的html表格上。我想检索用户想要在post方法中看到的条目数量。
[HttpPost]
public ActionResult Index(int? selectedOption, int? page, string pageSize)
{
}
我怎样才能做到这一点?
答案 0 :(得分:1)
您可以使用FormCollection访问下拉列表。
[HttpPost]
public ActionResult Index(FormCollection form, int? page, string pageSize)
{
string strDDLValue = form["pageSize"].ToString();
}
答案 1 :(得分:1)
首先,由于idempotence,通常应通过Get请求处理pagignation。此外,使用浏览器后退按钮也会减少问题。
假设您的控制器看起来像这样:
[HttpGet]
public ActionResult Index(int pageNum = 1, int pageSize = 20)
{
// Your pagination code here
}
在你的视图代码中,你不需要输入内联javascript(无论如何都是一个坏主意)你可以在控件上放置一个id和/或一个css类来选择它。
@Html.DropDownList("pageSize",
new SelectList(ViewBag.ListItems, "pageSize"), "pageSize",
new {@id="page-size", @class = "pager-control"})
然后在你的javascript中你可以这样做:
$(".pager-control").on("change", function(){
window.location.replace(
'@Url.Action("Index", "Home")' + '?pageNum=' + $("#page-num").val()
+ '&pageSize=' + $("#page-size").val());
});
请注意,这假设您的网页控件的ID为"page-num"
,类别为"pager-control"
。您还可以选择是否使用replace或href,具体取决于您是否在浏览器历史记录中使用它。