无法将类型'string'隐式转换为'system.web.mvc.selectlistgroup'

时间:2016-04-05 14:39:06

标签: c# asp.net-mvc-5

因此我不必写出另一个例子来展示我在寻找什么。 请参考此example

在数据库中使用该表的示例,我想在嵌套的下拉列表中使用Category作为字幕(缺少更好的单词)。

所以这就是我到目前为止:

List<SelectListItem> lstAssignments = new List<SelectListItem>();

        using(var context = new databaseconnectionstring()/*fake connection string name*/)
        {
            List<table1> lstActivity = context.table1.Where(x => x.deleted == false).ToList();

            foreach(table1 activity in lstActivity)
            {
                SelectListItem item = new SelectListItem() { Text = activity.text, Value = activity.ID.ToString(), Group = activity.subcategory };
            }

我在Group = activity.subcategory下面收到错误。

Cannot implicitly convert type 'string' to 'system.web.mvc.selectlistgroup'

有意创建subcategory属性以区分下拉列表(与引用链接中的Category相同)

如何将subcategory转换为要求的内容?

5 个答案:

答案 0 :(得分:1)

正如错误提到的那样,您正在尝试为SelectListGroup属性提供String值。

您应该进行如下初始化:

foreach(table1 activity in lstActivity)
{
    SelectListItem item = new SelectListItem() 
        { 
           Text = activity.text, 
           Value = activity.ID.ToString(), 
           Group = new SelectListGroup() { Name = activity.subcategory }
        };
}

<强> [编辑]

改进将在foreach之前声明SelectListGroup s并相应地将它们分配给项目。这会产生更少的实例。

答案 1 :(得分:1)

错误告诉您确切需要做什么。 Group属性的类型为SelectListGroup,您将其传递给字符串,因此会出错。所以,放松一下,你只需要利用你的字符串创建一个SelectListGroup的实例。 SelectListGroup本身具有Name属性,因此您应该可以执行以下操作:

foreach(table1 activity in lstActivity)
{
    var group = new SelectListGroup { Name = activity.subcategory };
    SelectListItem item = new SelectListItem() { Text = activity.text, Value = activity.ID.ToString(), Group = group };
}

答案 2 :(得分:1)

这是因为您尝试设置的实际Group属性需要SelectListGroup个对象,而不是activity.subcategory所在的字符串。

您需要做的是实际创建Group的实例,并将其Name属性设置为循环中的类别:

SelectListItem item = new SelectListItem() { 
                           Text = activity.text, 
                           Value = activity.ID.ToString(), 
                           Group = new SelectListGroup(){ Name = activity.subcategory }};

答案 3 :(得分:0)

嘿抱歉这个问题。我只是想通了。

List<SelectListItem> lstAssignments = new List<SelectListItem>();

        using(var context = new fakeconnectionstring())
        {
            List<table1> lstActivity = context.table1.Where(x => x.deleted == false).ToList();

            foreach(table1 activity in lstActivity)
            {
                SelectListGroup lstGroupCategories = new SelectListGroup() { Name = activity.subcategory };
                SelectListItem item = new SelectListItem() { Text = activity.text, Value = activity.ID.ToString(), Group = lstGroupCategories };
            }
        }

答案 4 :(得分:0)

 public List<SelectListItem> CarregarDropDownList(Centro modeloSelected = null, string selecttext = null)
    {
        var centro = GetAtivos().GroupBy(x => x.Centro1).Select(group => group.First()).OrderBy(x => x.Centro1).ToList();
        List<SelectListItem> lista = centro.Select(a => new SelectListItem() { Text = $"{a.Centro1}", Value = a.id_Centro.ToString(), Selected = (modeloSelected != null && modeloSelected.id_Centro == a.id_Centro) }).OrderBy(x => x.Text).ToList();
        //if (modeloSelected == null)
            lista.Insert(0, new SelectListItem() { Value = "", Text = selecttext ?? "-Todos-" });

        return lista;
    }