C# 具有相同id的两个组件'**{BehaviorID}**';can';不能添加到应用程序中
我试图在网格视图上的AJAXToolKit中实现CascadingDropdown。 一切正常,下拉菜单获取并填充数据 但是,当我尝试将BehaviorID属性添加到下拉列表中(以帮助在JavaScript中识别它,以便我可以将C# 具有相同id的两个组件'**{BehaviorID}**';can';不能添加到应用程序中,c#,asp.net,gridview,ajaxcontroltoolkit,cascadingdropdown,C#,Asp.net,Gridview,Ajaxcontroltoolkit,Cascadingdropdown,我试图在网格视图上的AJAXToolKit中实现CascadingDropdown。 一切正常,下拉菜单获取并填充数据 但是,当我尝试将BehaviorID属性添加到下拉列表中(以帮助在JavaScript中识别它,以便我可以将add_populated()函数绑定到它时,它会给出以下错误消息 “无法将具有相同id“{BehaviorID}”的两个组件添加到应用程序中。” 我怀疑这是因为应用程序试图将相同的BehaviorID分配给GridViview中的每个级联下拉列表 有什么想法吗 ASPX
add_populated()
函数绑定到它时,它会给出以下错误消息
“无法将具有相同id“{BehaviorID}”的两个组件添加到应用程序中。”
我怀疑这是因为应用程序试图将相同的BehaviorID分配给GridViview中的每个级联下拉列表
有什么想法吗
ASPX:
<asp:GridView ID="grdTInfo" runat="server" AutoGenerateColumns="False" onrowdatabound="grdTInfo_RowDataBound" ShowFooter="True" EnableModelValidation="True" >
<Columns>
<asp:TemplateField HeaderText="TDBID" Visible="False">
<EditItemTemplate>
<asp:TextBox ID="TextBox8" runat="server" Text='<%# Bind("TSId") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="TSID" runat="server" Text='<%# Bind("TSId") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="SL.No" >
<ItemStyle BorderStyle="Solid" BorderWidth="1px" Font-Names="Calibri"
Font-Size="Small" HorizontalAlign="Center" VerticalAlign="Middle" Width="1%"
Wrap="False" />
</asp:BoundField>
<asp:TemplateField HeaderText="HPname">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("PName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemStyle BorderStyle="Solid" BorderWidth="1px" Font-Names="Calibri"
Font-Size="Small" HorizontalAlign="Center" VerticalAlign="Middle" Width="15%"
Wrap="False" />
<ItemTemplate>
<asp:DropDownList ID="ddlPractice" runat="server" Width="100%">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="HTName">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("TName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemStyle BorderStyle="Solid" BorderWidth="1px" Font-Names="Calibri"
Font-Size="Small" HorizontalAlign="Center" VerticalAlign="Middle" Width="15%"
Wrap="False" />
<ItemTemplate>
<cc1:DynamicDropDownList ID="ddlTask" runat="server" Width="100%"
OnSelectedIndexChanged="ddlTask_SelectedIndexChanged">
</cc1:DynamicDropDownList>
<ajaxToolkit:CascadingDropDown ID="ccdTask" runat="server" Category="Task" TargetControlID="ddlTask" PromptText="Select Task" LoadingText="Loading Tasks.." ServiceMethod="BindTaskDetails" ServicePath="CascadingDropdown.asmx">
</ajaxToolkit:CascadingDropDown>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="STask">
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("STName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemStyle BorderStyle="Solid" BorderWidth="1px" Font-Names="Calibri"
Font-Size="Small" HorizontalAlign="Center" VerticalAlign="Middle" Width="10%"
Wrap="False" />
<ItemTemplate>
<cc1:DynamicDropDownList ID="ddlST" runat="server" Width="100%" >
</cc1:DynamicDropDownList>
<ajaxToolkit:CascadingDropDown BehaviorID="abc" ID="ccdST" runat="server" Category="ST" ParentControlID="ddlTask" TargetControlID="ddlST" PromptText="Select Sub-task" LoadingText="Loading Sub-tasks.." ServiceMethod="BindSTDetails" ServicePath="CascadingDropdown.asmx" >
</ajaxToolkit:CascadingDropDown >
</ItemTemplate>
</asp:TemplateField>
</Columns>
经过研究,我找到了解决办法 在创建GridView时,我们应该为GridView的每一行中创建的每个下拉列表提供唯一的BehaviorID 因此,我们可以覆盖
grdTInfo\u RowCreated
事件,为每个下拉列表分配唯一的行为ID,如下所示
protected void grdvTimelogInfo_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Programmatically reference the PopupControlExtender
CascadingDropDown cc1 = e.Row.FindControl("ccdTask") as CascadingDropDown;
CascadingDropDown cc2 = e.Row.FindControl("ccdST") as CascadingDropDown;
// Set the BehaviorID
string behaviorID = string.Concat("cc1", e.Row.RowIndex);
cc1.BehaviorID = behaviorID;
string behaviorID2 = string.Concat("cc2", e.Row.RowIndex);
cc2.BehaviorID = behaviorID2;
}
}