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>

Mvc Dropdownlist postback value

您的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);
     }
 }

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