我正在尝试从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>
答案 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);
}
}
当您发布表单时,带有名称/值对的元素会进入您方法的参数并按名称分配