#asp.net
#asp.net
Вопрос:
У меня есть VB.NET / ASP.NET веб-приложение. Я добавил выпадающий список в FooterTemplate в Gridview. И я использовал ajax для обратной передачи. Но когда я добавляю выпадающий список к триггерам, vs выдает мне эту ошибку :
Не удалось найти элемент управления с идентификатором ‘DropDownList2’ для триггера в UpdatePanel ‘UpdatePanel1’.
ASP.NET код — это что-то вроде этого :
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="GridView2" runat="server" Width="329px" AutoGenerateColumns="False"
Font-Names="Arial" Font-Size="11pt"
AlternatingRowStyle-BackColor="#C2D69B" HeaderStyle-BackColor="green"
AllowPaging="True" ShowFooter="True" OnPageIndexChanging="OnPaging"
Style="margin-right: 0px" BackColor="White" BorderColor="#336666"
BorderStyle="Double" BorderWidth="3px" CellPadding="3"
GridLines="Horizontal">
<AlternatingRowStyle BackColor="#C2D69B" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="lnkRemove" runat="server" CommandArgument='<%# Eval("il_ad")%>'
OnClientClick="return confirm('Samp;#304;LMEK amp;#304;STEDamp;#304;amp;#286;amp;#304;Namp;#304;ZDEN EMamp;#304;N Mamp;#304;Samp;#304;Namp;#304;Z?')"
Text="Samp;#304;L" OnClick="DeleteDURUM"></asp:Button>
</ItemTemplate>
<FooterTemplate>
<asp:Button ID="btnAdd" runat="server" Text="EKLE" OnClick="AddNewDURUM" />
</FooterTemplate>
</asp:TemplateField>
<asp:CommandField EditText="DEamp;#286;amp;#304;amp;#350;Tamp;#304;R" ButtonType="Button"
CancelText="amp;#304;PTAL" DeleteText="Samp;#304;L" UpdateText="KAYDET" ControlStyle-Width="70PX"
CausesValidation="False">
<ControlStyle Width="70px" />
</asp:CommandField>
<asp:TemplateField ItemStyle-Width="30px" HeaderText="YTM No">
<ItemTemplate>
<asp:Label ID="lblytm_id" runat="server" Text='<%# Eval("ytm_id")%>'></asp:Label>
</ItemTemplate>
<ItemStyle Width="30px"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="amp;#304;l">
<ItemTemplate>
<asp:Label ID="il_ad" runat="server" Text='<%# Eval("il_ad")%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="il_ad" runat="server" Text='<%# Eval("il_ad")%>'></asp:TextBox>
</EditItemTemplate>
<!-- Dropdownlist is here : -->
<FooterTemplate>
<asp:DropDownList ID="DropDownList2" runat="server" Width= "120px" DataSourceID="iller_yukle" AutoPostBack="True">
</asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="White" ForeColor="#333333" />
<HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#336666" ForeColor="#000066" HorizontalAlign="Left" />
<RowStyle BackColor="White" ForeColor="#000066" />
<SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F7F7F7" />
<SortedAscendingHeaderStyle BackColor="#487575" />
<SortedDescendingCellStyle BackColor="#E5E5E5" />
<SortedDescendingHeaderStyle BackColor="#275353" />
</asp:GridView>
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="GridView2" />
<asp:AsyncPostBackTrigger ControlID="DropDownList2" /> <!-- Error is here -->
</Triggers>
</asp:UpdatePanel>
в чем ошибка, я не мог понять, спасибо..
Ответ №1:
Существует DropDownList
только внутри GridView
, и вы не можете напрямую обращаться к элементам управления внутри GridView
.
Вам нужно будет динамически добавлять триггер в UpdatePanel
после того, как вы привязали GridView.
Чтобы динамически добавить его, вам нужно сначала привязать свой gridview, а затем зарегистрировать триггер
AsyncPostBackTrigger apt = new AsyncPostBackTrigger();
apt.ControlID = ((Button)this.GridView1.FooterRow.FindControl("btnTrigger")).UniqueID;
apt.EventName = "Click";
this.UpdatePanel1.Triggers.Add(apt);
В этом примере я использую button's
событие click для запуска UpdatePanel
. Вы можете адаптировать это к DropDownList
Ответ №2:
Как правило, ошибка заключается в том, что вам не нужно указывать триггеры для элементов управления внутри UpdatePanel, пока вы не установите ChildrenAsTriggers="false"
их на этой UpdatePanel
Комментарии:
1. @Curt, согласен, но это дает простой обходной путь для этой конкретной ситуации, не вдаваясь в объяснение именования контейнеров.