Mvc Dropdownlist回发值

时间:2015-11-16 09:56:29

标签: c# asp.net asp.net-mvc

我正在尝试从dropdownlist中获取值到我的控制器中,但我一直得到值0。

当用户从下拉列表中选择值时,我想执行排序功能。回发正在运行,但是当我从下拉列表中选择值时,我只是保持0而不是1或2.我做得对吗?或者我应该在我的控制器中定义它?

抱歉,我只是个初学者。

控制器

    [HttpGet]
    public ActionResult Products(int page = 1, int pageSize = 9)
    {   
        Shopping db = new Shopping();
        List<Product> listProducts = db.Products.ToList();
        PagedList<Product> model = new PagedList<Product>(listProducts, page, pageSize);
        return View(model);
    }


    [HttpPost]
    public ActionResult Products(int? sortBy, int page = 1, int pageSize = 9)
    {
        sortBy = Convert.ToInt32(Request.Form["OrderBy"]);
        switch (sortBy)
        {
            case 1:
                List<Product> listProductsasc = db.Products.OrderBy(p=>p.Name).ToList();
                PagedList<Product> modelasc = new PagedList<Product>(listProductsasc, page, pageSize);
                return View(modelasc);
            case 2:
                List<Product> listProductsdesc = db.Products.OrderByDescending(p=>p.Name).ToList();
                PagedList<Product> modeldesc = new PagedList<Product>(listProductsdesc, page, pageSize);
                return View(modeldesc);
            default:
                List<Product> listProducts = db.Products.ToList();
                PagedList<Product> model = new PagedList<Product>(listProducts, page, pageSize);
                return View(model);
        }
    }

查看

        <div class="col-sm-4">
            Sort by:
            @Html.DropDownList("OrderBy", new List<SelectListItem>

             {
                new SelectListItem{ Text="A-Z", Value = "1" },
                new SelectListItem{ Text="Z-A", Value = "2" }
             }, "-- Order By --" , new { onchange = "document.getElementById('Form1').submit();" })

        </div>
        <div class="col-sm-4">
            @using (Html.BeginForm("Products", "Home", FormMethod.Post, new { id = "Form1" }))
            { 
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" class="btn btn-default" value="Filter" />
                </div>
            </div>
            }
        </div>

2 个答案:

答案 0 :(得分:4)

您的下拉列表位于表单标记之外,因此它永远不会回发其值。将其移至@using (Html.BeginForm()) { .... }

旁注,您只需在方法中添加参数int orderBy即可正确绑定。除非有特殊原因需要发布POST,否则您还应考虑使用FormMethod.Get形式并删除POST方法

答案 1 :(得分:2)

您需要插入

@Html.DropDownList("OrderBy", new List<SelectListItem>
{
     new SelectListItem{ Text="A-Z", Value = "1" },
     new SelectListItem{ Text="Z-A", Value = "2" }
},

进入@Html.BeginForm()喜欢

        <div class="col-sm-4">
            @using (Html.BeginForm("Products", "Home", FormMethod.Post, new { id = "Form1" }))
            { 
<div class="col-sm-4">
            Sort by:
            @Html.DropDownList("OrderBy", new List<SelectListItem>

             {
                new SelectListItem{ Text="A-Z", Value = "1" },
                new SelectListItem{ Text="Z-A", Value = "2" }
             }, "-- Order By --" , new { onchange = "document.getElementById('Form1').submit();" })

        </div>

            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" class="btn btn-default" value="Filter" />
                </div>
            </div>
            }
        </div>

并且要添加。您不需要使用Request.Form["OrderBy"],更改您的参数名称和方法

[HttpPost]
public ActionResult Products(int orderyBy, int page = 1, int pageSize = 9)
{
     switch (orderyBy)
     {
         case 1:
             List<Product> listProductsasc = db.Products.OrderBy(p=>p.Name).ToList();
             PagedList<Product> modelasc = new PagedList<Product>(listProductsasc, page, pageSize);
             return View(modelasc);
         case 2:
             List<Product> listProductsdesc = db.Products.OrderByDescending(p=>p.Name).ToList();
             PagedList<Product> modeldesc = new PagedList<Product>(listProductsdesc, page, pageSize);
             return View(modeldesc);
         default:
             List<Product> listProducts = db.Products.ToList();
             PagedList<Product> model = new PagedList<Product>(listProducts, page, pageSize);
             return View(model);
     }
 }

当您发布表单时,带有名称/值对的元素会进入您方法的参数并按名称分配