将Dropdownlist帮助器选择的值发送到POST方法

时间:2016-10-03 12:35:59

标签: jquery asp.net asp.net-mvc

我有这个下拉列表

@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)
{
}

我怎样才能做到这一点?

2 个答案:

答案 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,具体取决于您是否在浏览器历史记录中使用它。