Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C向下拉菜单添加数据属性#_C#_Asp.net_Linq_Entity Framework - Fatal编程技术网

C# 如何使用C向下拉菜单添加数据属性#

C# 如何使用C向下拉菜单添加数据属性#,c#,asp.net,linq,entity-framework,C#,Asp.net,Linq,Entity Framework,我有一个标准的下拉列表,能够数据绑定到列表 <asp:DropDownList runat="server" ID="ddlMake" ClientIDMode="Static" DataTextField="Name" DataValueField="URL" AppendDataBoundItems="true"> <asp:ListItem>Select Make</asp:ListItem> </asp:DropDownList>

我有一个标准的下拉列表,能够数据绑定到列表

<asp:DropDownList runat="server" ID="ddlMake" ClientIDMode="Static" DataTextField="Name" DataValueField="URL" AppendDataBoundItems="true">
    <asp:ListItem>Select Make</asp:ListItem>
</asp:DropDownList>

选择Make
我想向选项添加一个数据属性,如下所示:

<asp:ListItem data-siteid="<%# DataBinder.Eval(Container.DataItem, "SiteID") %>">Select Make</asp:ListItem>
选择Make
很明显,我遇到了一个错误,因为它无法识别数据站点ID

列表是数据绑定的。


任何提示都很方便

您可以在代码隐藏中执行此操作。我不确定这是否是最优雅的方法,但它应该有效

Dim dataSrc() As String = {"ABC", "123", "!@*#"}
drp.DataSource = dataSrc
drp.DataBind()
For i = 0 To drp.Items.Count - 1
    drp.Items(i).Attributes.Add("data-siteId", dataSrc(i))
Next

此外,如果这只是一个不带数据的东西,您可以考虑使用同样应该工作的HTMLSELL控件:

<select id="drp2" runat="server">
  <option data-siteId="2">ABC</option>
  <option data-siteId="3">123</option>
  <option data-siteId="4">@*!&</option>
</select>

基础知识
123
@*!&

如果不需要事件处理,您可以使用纯html重写它:

    <select>
      <%foreach (var item in DataSource){%>
        <option data-siteid="<%=item.SiteID%>" value="<%=item.Value%>"><%=item.Name%> </option>
      <%}%>
    </select>

我最终使用了一个转发器,因为页面不需要重新发布。这使我不必处理ondatabound事件

<asp:Repeater runat="server" ID="rptDropDown">
    <HeaderTemplate>
        <select id="ddlMake">
            <option value="">Select Make</option>
    </HeaderTemplate>
    <ItemTemplate>
        <option data-siteid="<%# DataBinder.Eval(Container.DataItem, "SiteID") %>" value="<%# DataBinder.Eval(Container.DataItem, "URL") %>"><%# DataBinder.Eval(Container.DataItem, "Name") %></option>
    </ItemTemplate>
    <FooterTemplate>
        </select>
    </FooterTemplate>        
</asp:Repeater>

选择Make
我最终这样做了(其中
ds
是数据集):


for(int row=0;row,如果您将DropDownList绑定到某个集合(比如List)和存储在此集合中的对象(在本例中是)拥有属性SiteID那么您应该能够使用您已有的代码访问此属性。您可以为部分代码提供数据绑定吗?您可以提供一个示例吗?我确实可以通过列表访问数据,但是我不确定如何分配它,因为它不是有效值。抱歉,我搞错了。因此,您正在尝试添加数据绑定吗ListItem的自定义属性,对吗?也许你可以使用这个?还有你到底想实现什么?也许有其他方法可以获得相同的结果?是的,我只是构建了一个转发器,感谢tipThanks的回答!这正是我想要的!!
for (int row = 0; row <= ds.Tables(0).Rows.Count - 1; row++) {
    ddl.Items(row).Attributes.Add("data-siteid", ds.Tables(0).Rows(row)("SiteID"));
}