Mvc Dropdownlist postback value
本文关键字:value postback Dropdownlist Mvc | 更新日期: 2023-09-27 18:22:07
我试图将dropdownlist中的值获取到我的控制器中,但我一直获取值0。
我想在用户从下拉列表中选择值时执行排序功能。Postback正在工作,但当我从下拉列表中选择值时,我只得到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>
您的dropdownlist位于表单标记之外,因此它从不返回其值。将其移动到@using (Html.BeginForm()) { .... }
内部
附带说明,您只需在方法中添加一个参数int orderBy
,它就会被正确绑定。您还应该考虑制作表单FormMethod.Get
并删除POST方法,除非有特殊原因需要制作POST
您需要插入
@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);
}
}
当您发布表单时,带有名称/值对的元素会进入方法的参数,并通过它们的名称来分配它们