填写mvc下拉列表的更好方法

时间:2014-09-14 21:25:39

标签: html asp.net-mvc drop-down-menu html-select

我尝试使用标记

创建下拉列表
        <select name="manufacturer" class="form-control">
            <option>@null</option>
            @foreach (var item in Model) {
                <option>@item.Manufacturer</option>
            }
        </select><br>

但是这是一个问题:它不会填充所有可用的manufacturers,只显示当前页面中的项目。示例:http://i.imgur.com/na0x5eQ.png

那是因为它使用从控制器传递的模型,该模型并不总是包含数据库中的每个项目。 (因为分页或搜索后)

以下是partial view

中的完整侧边栏代码
 @model IPagedList<Products>
@using PagedList
@using PagedList.Mvc

<div id="filter" class="left">
    @using (Html.BeginForm("Filter", "SearchFilter")) {
        <div>
            <b>Manufacturer:</b> <br>
            <select name="manufacturer" class="form-control">
                <option>@null</option>
                @foreach (var item in Model) {
                    <option>@item.Manufacturer</option>
                }
            </select><br>

            <b>Name:</b> <br>@Html.TextBox("name", null)<br>
            <b>Price From:</b> <br>@Html.TextBox("min", null)<br>
            <b>To:</b> <br>@Html.TextBox("max", null)<br>
            <button type="submit" value="search"><b>Search</b></button>
        </div>
    }
</div>

那么解决这个问题的方法是什么?

1 个答案:

答案 0 :(得分:0)

既然你知道它为什么会发生

  

这是因为它使用从控制器传递的模型,该模型并不总是包含数据库中的每个项目。 (因为分页或搜索后)

然后为什么不在那里解决它。也许您需要为制造商提供单独的验证表(如果您还没有制造商)。

型号:

public class ProductsModel
{
    public IPagedList<Products> CurrentProducts {get; set;}
    public int ManufacturerId {get; set;}
    public int MinPrice{get; set;}
    public int MaxPrice{get; set;}
}

控制器操作:

[HttpGet]
public ViewResult CurrentProducts()
{
    ProductsModel model = new ProductsModel();
    model.CurrentProducts = _repository.Product;
    ViewBag.ManufacturerId = from p in _repository.Product select p.Manufacturer;
    return View(model);
}

[HttpPost]
public ViewResult CurrentProducts(ProductsModel model)
{
    if(ModelState.IsValid)
    {
        model.CurrentProducts = _repository.Product.Where(t=>t.ManufacturerId == model.ManufacturerId);
        ViewBag.ManufacturerId = from p in _repository.Product select p.Manufacturer;
    }
    return View(model);
}

在视图中,创建一个如下所示的下拉列表:

@model MyNameSpace.ProductsModel
@Html.DropDownListFor(model=> model.ManufacturerId, string.Empty);