2012-02-21 1 views
0

im nouveau à asp.net .. s'il vous plaît ours avec moi si ma question est trop trivial !!! :)Une variable déclarée au niveau de la classe mais initialisée dans page_load perd sa portée dans un eventhandler button_click?

Im en utilisant un contrôle Accordian dans un panneau de mise à jour. et j'ai aussi un bouton pour enregistrer quelques données du contrôle accordéian! - Ce complet est un contrôle utilisateur qui est utilisé dans une autre page .aspx.

maintenant dans l'événement page_load du contrôle de l'utilisateur j'initialise ma connexion de base de données qui fonctionne parfaitement lors du chargement des données à l'accordian .. mais quand je clique sur save, dans le bouton save nul..!! (Même si elle est initialisé dans le page_load) s'il vous plaît aider ..

.ascx est comme ici:

<asp:UpdatePanel ID="PrefPanel" runat="server" > 
    <ContentTemplate> 
    <ajaxToolkit:Accordion ID="PrefAccordion" runat="server" HeaderCssClass="accordionHeader" 
     HeaderSelectedCssClass="accordionHeaderSelected" ContentCssClass="accordionContent" 
     BackColor="#E8EAF7" Height="530px" Width="500px" AutoSize="None" RequireOpenedPane="false" 
     BorderStyle="Solid" BorderWidth="1" BorderColor="Black"> 
     <Panes> 

      <ajaxToolkit:AccordionPane ID="ProjCategoryPaneID" runat="server"> 
       <Header > Project Category</Header> 
       <Content> 
        <asp:Panel ID="ProjCategoryPanel" runat="server" Width="100%"> 
         <table align="center" width="100%"> 
          <tr></tr> 
          <tr> 
           <td align="left"> 
            <asp:CheckBoxList RepeatDirection="Vertical" TextAlign="Left" ID="ProjCategoryItem1" runat="server" AutoPostBack="false" CausesValidation="false" /> 
           </td> 
          </tr> 
         </table> 
        </asp:Panel> 
       </Content> 
      </ajaxToolkit:AccordionPane> 
<asp:Button ID="btnSavePref" CssClass="buttonsmall" runat="server" Text="Save" Width="60px" OnClick="btnSavePref_Click"/> 
    <asp:Button ID="btnCancelPref" CssClass="buttonsmall" runat="server" Text="Cancel" Width="60px" /> 
</ContentTemplate> 
</asp:UpdatePanel> 

le code se cache derrière comme ici:

public partial class UserPreferences : System.Web.UI.UserControl 
    { 
     private EAReportingDAL m_DataAccessLayer = null; 

     // Projects Category 
     Panel projectCategoryPanel; 
     CheckBoxList projectCategoryList; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      String connectionString = WebConfigurationManager.ConnectionStrings   ["BSCDB"].ConnectionString; 
      m_DataAccessLayer = new EAReportingDAL(connectionString); 
          LoadUserPreferences(); 
     } 

     protected void btnSavePref_Click(object sender, EventArgs e) 
     { 
      string userName = this.Page.User.Identity.Name; 
      DataSet availabeData = m_DataAccessLayer.GetUserPreferences(this.Page.User.Identity.Name, Constants.ProjectsUIView); 
     } 
} 

le bouton événement click gestionnaire btnSavePref_Click() l'objet de connexion db m_DataAccessLayer est toujours null, mais alors que le même objet dans LoadUserPreferences() [que je n'ai pas collé ici] fonctionne bien! Plz guide moi où je me trompe ou si quelqu'un a besoin de plus de détails !!

+1

Sans code approprié, nous sommes aveugles. S'il te plaît, éclaire-nous. –

+0

Avez-vous utilisé IsPostback – Prabhavith

+0

@ShadowWizard: ?? – Viniez

Répondre

0

Je ne suis pas très familier avec la mécanique UpdatePanel, mais peut-être que vous l'avez défini de manière à contourner la méthode Page_Load.

Ce que je suggère est de déplacer le code créer la couche d'accès aux données à la méthode séparée appelant cette méthode à la fois la charge de la page et cliquez sur le bouton Gestionnaire:

private void InitDataAccess() 
{ 
    //ignore if already created 
    if (m_DataAccessLayer != null) 
     return; 
    String connectionString = WebConfigurationManager.ConnectionStrings   ["BSCDB"].ConnectionString; 
    m_DataAccessLayer = new EAReportingDAL(connectionString); 
    LoadUserPreferences(); 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    InitDataAccess(); 
} 

protected void btnSavePref_Click(object sender, EventArgs e) 
{ 
    InitDataAccess(); 
    string userName = this.Page.User.Identity.Name; 
    DataSet availabeData = m_DataAccessLayer.GetUserPreferences(this.Page.User.Identity.Name, Constants.ProjectsUIView); 
} 
Questions connexes