0

我在将包含下拉数据和模型的模型传递给视图时遇到问题。

使用此代码加载我的页面,但下拉列表在选择时包含“System.Web.MVC.SelectList”。

这是我的控制器代码。

public ActionResult Index(string productNameFilter, string productCategoryFilter, String productTypeFilter )
{
    var ddl = new Items();
    ddl.CategoryddList = itemsRepository.GetItemDdl("Item Categories").Select(c => new SelectListItem
    {
        Value = c.DropdownID.ToString(),
        Text = c.DropdownText
    });
    ViewBag.CategoryDD = new SelectList(ddl.CategoryddList, "Value", "Text");
    var model = itemsRepository.GetItemByName(productNameFilter);
    return View(model);
}

这是我的看法

@model Ienumerable<Models.items.items>

@Html.DropDownList("productCategoryFilter", 
                   new SelectList(ViewBag.CategoryDD), 
                   "---Select Category---") 
4

1 回答 1

1

旁注 - 如果您在 View 和 Model 之间使用 ViewModel 而不是直接绑定到模型,则可以将 SelectList 放在 ViewModel 上并使用 @Html.DropdownFor() 而不是 @Html.Dropdown()。ViewBag 确实应该谨慎使用。

但是回到你原来的问题:

什么是“项目()”?在你的行中

var ddl = new Items();

我不确定你有什么理由不让它可枚举。

我怀疑它不起作用,因为您从选择列表中创建了一个选择列表两次——在您后面的代码中将 ViewBag.CategoryDD 定义为 SelectList(),然后在您的 Razor 代码中创建一个新的 SelectList()现有的选择列表。你不应该这样做。

我这样做的方法是创建一个 ProductViewModel 类,其中包含您的产品类别列表和产品列表(您当前的模型),以及所选过滤器的属性。

public class ProductViewModel
{
    public IEnumerable<Model.items.items> ProductList {get;set;}
    public IEnumerable<SelectListItem> ProductCategoryList {get;set;} //SelectList is an IEnumerable<SelectListItem>
    public string SelectedCategory  {get;set;}
}

然后在您看来,模型将是

@model ProductViewModel

@Html.DisplayFor(model => model.SelectedCategory, "---Select Category---")
@Html.DropdownListFor(model => model.SelectedCategory, Model.ProductCatgoryList)
于 2012-10-22T19:48:22.580 回答