TextBox внутри Accordion внутри Datalist... findcontrol не работает
Я искал, но не повезло...
У меня есть текстовое поле внутри элемента управления аккордеоном, которое находится внутри списка данных... Я хочу разрешить форме аккордеона передавать некоторые значения, но я не могу получить эти значения из текстового поля, и findcontrol не работает.
<asp:DataList ID="AddProjectDataList" runat="server">
<ItemTemplate>
<asp:HiddenField ID="clientid" runat="server" Value='<%# Eval("mmmclientlistid") %>'></asp:HiddenField>
<asp:Table ID="ProjectTableClass" runat="server" style="width:600px;height:600px"><asp:TableRow><asp:TableCell VerticalAlign="Top">
<b>New <asp:Label ID="ProjectTypeLabel" Text='<%# Eval("ProjectTypeName") %>' runat="server"></asp:Label> Project</b>
<table class="AddProject" cellpadding="5">
<tr>
<td valign="top">
<b>Campaign</b> information:
</td>
<td>
<asp:DropDownList ID="DDCampaignList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="OnChange_selectCampaign" AppendDataBoundItems="True" >
<asp:ListItem Text="SELECT A CAMPAIGN:" Value="-1"></asp:ListItem>
</asp:DropDownList>
<br />
<ajaxToolkit:Accordion
ID="CampaignAccordion"
runat="Server"
SelectedIndex="1"
HeaderCssClass="accordionHeader"
HeaderSelectedCssClass="accordionHeaderSelected"
ContentCssClass="accordionContent"
AutoSize="None"
FadeTransitions="true"
TransitionDuration="250"
FramesPerSecond="40"
RequireOpenedPane="false"
SuppressHeaderPostbacks="true">
<Panes>
<ajaxToolkit:AccordionPane ID="AccordionPane1" runat="server"
HeaderCssClass="accordionHeader"
HeaderSelectedCssClass="accordionHeaderSelected"
ContentCssClass="accordionContent">
<Header>
<asp:LinkButton ID="AddCampaignLink" runat="server">Or Click to Add New Campaign</asp:LinkButton> </Header>
<Content>
<asp:TextBox ID="campaignNameTextBox" Style="width: 400px" runat="server"></asp:TextBox><br />
Description (optional):<br />
<asp:TextBox ID="campaignDescriptionTextBox" runat="server" TextMode="MultiLine"
Columns="30" Rows="3"></asp:TextBox>
<br />
<asp:Button ID="AddCampaignButton" runat="server" Text="Add New Campaign" OnClick="AddCampaign_Click" />
</Content>
</ajaxToolkit:AccordionPane>
</Panes>
<HeaderTemplate>...</HeaderTemplate>
<ContentTemplate>...</ContentTemplate>
А потом в коде позади
protected void AddCampaign_Click(object sender, EventArgs e)
{
//click to add campaign
//campaignname
//clientid
HiddenField EID = (HiddenField)FindControl("HiddenFieldEID");
TextBox campaignNameTextBox = (TextBox)AddProjectDataList.Items[0].FindControl("campaignNameTextBox");
TextBox campaignDescriptionTextBox = (TextBox)AddProjectDataList.Items[0].FindControl("campaignDescriptionTextBox");
tbl_campaign newcampaign = new tbl_campaign();
newcampaign.clientID = Convert.ToInt32(DDClientList.SelectedValue);
newcampaign.employeeID = Convert.ToInt32(HiddenFieldEID.Value);
newcampaign.campaignName = campaignNameTextBox.Text;
newcampaign.campaignDescription = campaignDescriptionTextBox.Text;
db.AddTotbl_campaign(newcampaign);
db.SaveChanges();
}
Если я избавлюсь от панели аккордеона, она будет работать нормально. Контроль расположен без проблем. Но с аккордеоном такой удачи нет. (Поле hiddenFieldEID расположено просто отлично, потому что оно находится за пределами аккордеона.)
Нужно ли отдельное событие onItemDataBound в элементе управления DataList? Если так, что там происходит, и как я могу связать это с событием clickclick?
Спасибо!
1 ответ
Ну, я мог бы просто понять это.
Я сделал это:
Control CampaignAccordion = (Control)AddProjectDataList.Items[0].FindControl("CampaignAccordion");
TextBox campaignNameTextBox = (TextBox)CampaignAccordion.FindControl("campaignNameTextBox");
TextBox campaignDescriptionTextBox = (TextBox)CampaignAccordion.FindControl("campaignDescriptionTextBox");
И это сработало. Нет отдельного события привязки данных. Это нормальный способ сделать это?