在C#Webform中使用OPTGROUP初始化SELECT2下拉列表

时间:2019-06-25 16:11:29

标签: c# jquery-select2

我在上下搜索了一个确切的示例,以了解如何用<select>填充<optgroup>控件,但是得到了各种结果。 select2.org上的文档指出,格式应如下所示:

  {
  "results": [
    { 
      "text": "Group 1", 
      "children" : [
        {
            "id": 1,
            "text": "Option 1.1"
        },
        {
            "id": 2,
            "text": "Option 1.2"
        }
      ]
    },
    { 
      "text": "Group 2", 
      "children" : [
        {
            "id": 3,
            "text": "Option 2.1"
        },
        {
            "id": 4,
            "text": "Option 2.2"
        }
      ]
    }
  ],
  "pagination": {
    "more": true
  }
}

但是我的结果抛出一个错误,指出“ ID”字段不存在。我认为这是由于我初始化<select>的方式所致,但我看不到其他方式。

首先,使用存储过程从MS SQL数据库中提取数据。我无法轻松控制数据格式,因此我使用Linq创建对象,然后使用.DataBind()初始化<select>。这是相关代码:

HTML:

<select id="MySelect" name="myselect" runat="server"></select>

父母和子女的定义:

public class Parent : Child
{
    public List<Child> children { get; set; }
}

public class Child
{
    public string id { get; set; }
    public string text { get; set; }
}

Linq语句:

var parents = myData
    .Select(c => new Parent()
    {
        text = string.Format("{0} {1}", c.first_name, c.last_name),
        id = c.ID.ToString(),
        children = GetChildren(locations, c)
    })
    .ToArray();

    // Convert to JSON
    var json = JsonConvert.SerializeObject(new
    {
        results = parents
    });

Linq结果已转换为JSON:

{  
   "results":[  
      {  
         "id":"2",
         "text":"Parent 1 ",
         "children":[  
         ]
      },
      {  
         "id":"39",
         "text":"Parent 2",
         "children":[  
            {  
               "text":"Child 2.1",
               "id":"62",
               "Custom1":"196.00"
            },
            {  
               "text":"Child 2.2",
               "id":"130",
               "Custom1":"642.00"
            },
            {  
               "text":"Child 2.2",
               "id":"61",
               "Custom1":"0.00"
            }
         ]
      },
      {  
         "id":"15",
         "text":"Parent 3",
         "children":[  
            {  
               "text":"Child 3.1",
               "id":"13",
               "Custom1":"40.00"
            }
         ]
      }
   ]
}

数据绑定:

MySelect.DataSource = json;
MySelect.DataValueField = "id";
MySelect.DataTextField = "text";
MySelect.DataBind();

所有这些之后,MySelect <select>的下拉菜单中仅包含父元素,而实际HTML中没有<optgroup>元素。

我尝试从<Parent>类中排除'id'成员,但是.DataBind()抛出一个错误,即使子代都有ID,也没有'id'。 / p>

我怀疑使用.DataBind()无法解决此问题。我想保持代码干净,简短和快速。

我该怎么做?

0 个答案:

没有答案