2012-11-13 48 views
0

我已经搜查,但没有运气...文本框内手风琴内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”字段位置很好,因为它位于手风琴之外。)

在DataList控件中是否需要单独的onItemDataBound事件?如果是这样,那里会发生什么,以及如何将它与buttonclick事件关联起来?

谢谢!

回答

1

那么,我可能只是想通了。

我这样做:

   Control CampaignAccordion = (Control)AddProjectDataList.Items[0].FindControl("CampaignAccordion"); 
      TextBox campaignNameTextBox = (TextBox)CampaignAccordion.FindControl("campaignNameTextBox"); 
      TextBox campaignDescriptionTextBox = (TextBox)CampaignAccordion.FindControl("campaignDescriptionTextBox"); 

和它的工作。没有单独的数据绑定事件。这是正常的做法吗?