【问题标题】:MVC populate dropdownlist from database [duplicate]MVC从数据库中填充下拉列表[重复]
【发布时间】:2016-10-18 14:02:56
【问题描述】:

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

Cannon 将类型“System.Web.Mvc.SelectList”隐式转换为“System.Collections.Generic.IEnumerable

我的模特:

 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");
        }

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

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    返回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();
    }
    

    【讨论】:

    • 那么还有其他问题吗.. 在视图中是`@Html.DropDownListFor(model => model.SelectedCategoryId, new SelectList(Model.MyCategory, "Value", "Text"), "-- ---Select-----", htmlAttributes: new { @class= "form-control" })` 但我仍然有一个错误 Value cannot be null。参数名称:项目
    • 改用这个... @Html.DropDownListFor(model => model.SelectedCategoryId, Model.MyCategory, "-----Select-----", new { @class= "表单控件" })
    【解决方案2】:

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

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

    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;
    }
    

    【讨论】:

      【解决方案3】:

      你需要通过

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

      我只是给你一些初始化 List 的提示,但是如果要获取类的对象,请写下完整的类名。

      【讨论】:

        【解决方案4】:

        在 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");
                }
        

        【讨论】:

        • 他需要一个 SelectList 的 IEnumerable 才能在 Razor 视图中使用。所以应该反过来。他需要返回一个列表而不是单个项目
        【解决方案5】:

        看看GetCategory(),你应该返回一个IEnummerable&lt;SelectListItem&gt;类型的列表。相反,您将返回 SelectList 类型的单个项目。

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

        【讨论】:

        • 请将所有相关代码放入您的答案中。不要说答案就在这里。如果您认为这是一个重复的标志,那么它就是这样
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        • 2014-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多