MVC从数据库填充下拉列表

时间:2016-10-18 14:02:56

标签: c# asp.net-mvc

我尝试从我的数据库中填充DropDownList,但仍然有错误

  

Cannon implicity将类型'System.Web.Mvc.SelectList'转换为'System.Collections.Generic.IEnumerable< MyWeb.Models.HomeViewModels.SelectListItem>'

我的模特:

 public class BazarInsertViewModel
        {           
            public int SelectedCategoryId { get; set; }
            public IEnumerable<SelectListItem> MyCategory { get; set; }
        }
        public class SelectListItem
        {
            public string Value { get; set; }
            public string Text { get; set; }
        }

和我的控制员:

public ActionResult BazarInsert()
        {
            var model = new Models.HomeViewModels.BazarInsertViewModel
            {
                MyCategory = GetCategory()
            };
            return View(model);
        }
  private IEnumerable<Models.HomeViewModels.SelectListItem> GetCategory()
        {
            var dbo = new WebEntities();
            var category = dbo
                        .bazar
                        .Select(x =>
                                new Models.HomeViewModels.SelectListItem
                                {
                                    Value = x.ID.ToString(),
                                    Text = x.TITLE
                                });

            return new SelectList(category, "Value", "Text");
        }

请你解释一下我做错了什么?

5 个答案:

答案 0 :(得分:2)

返回category.ToList()就可以了。我在我的一个项目中使用它并且工作正常。

private IEnumerable<System.Web.Mvc.SelectListItem> GetCategory()
{
    var dbo = new WebEntities();
    var category = dbo
                    .bazar
                    .Select(x =>
                            new System.Web.Mvc.SelectListItem
                            {
                                Value = x.ID.ToString(),
                                Text = x.TITLE
                            });
     return category.ToList();
}

答案 1 :(得分:1)

您的方法是IEnumerable<Models.HomeViewModels.SelectListItem>!并且您的代码返回SelectList SelectList无法转换为您的自定义SelectListItem类(没有显式转换)

仅供参考:SelectListItem中已有System.Wb.Mvc个班级。为什么不使用它?

private IEnumerable<System.Web.Mvc.SelectListItem> GetCategory()
{
    var dbo = new WebEntities();
    var category = dbo
                    .bazar
                    .Select(x =>
                            new System.Web.Mvc.SelectListItem
                            {
                                Value = x.ID.ToString(),
                                Text = x.TITLE
                            }).ToList();
     return category;
}

答案 2 :(得分:0)

你需要传递

  new SelectList(category.Select(x => new{Value=x.Value,Text=x.Text}).ToList(), "Value", "Text");

我给你提示初始化List但请获取课程对象请写完整的班级名称。

答案 3 :(得分:-1)

在GetCategory()中,您返回一个SelectList,但您的方法签名表明IEnumerable。

将您的模型属性更改为SelectList:

public class BazarInsertViewModel
{
    public int SelectedCategoryId { get; set; }
    public SelectList MyCategory { get; set; }
}
public class SelectListItem
{
    public string Value { get; set; }
    public string Text { get; set; }
}

返回SelectList的方法签名

public ActionResult BazarInsert()
        {
            var model = new BazarInsertViewModel
            {
                MyCategory = GetCategory()
            };
            return View(model);
        }
        private SelectList GetCategory()
        {
            var dbo = new WebEntities();
            var category = dbo
                        .bazar
                        .Select(x =>
                                new Models.HomeViewModels.SelectListItem
                                {
                                    Value = x.ID.ToString(),
                                    Text = x.TITLE
                                });

            return new SelectList(category, "Value", "Text");
        }

答案 4 :(得分:-1)

看看GetCategory()你应该返回IEnummerable<SelectListItem>类型的列表。相反,您将返回SelectList类型的单个项目。

如果可以更改您的代码,请在此处检查另一个solution或其他类似问题的方法。