2012-02-21 8 views
0

私はasp.netに新しいです。 :クラスレベルで宣言され、page_loadで初期化された変数は、button_clickイベントハンドラでスコープを失いますか?

私は更新パネル内でアコーディオンコントロールを使用しています。私はまた、いくつかのデータをアコーディアンコントロールに保存するためのボタンを持っています! - この完全版は、別の.aspxページで使用されるユーザーコントロールです。

ユーザーコントロールのpage_loadイベントにアコーディオンにデータをロードしている間、絶対にうまく動作するデータベース接続を初期化しますが、保存ボタンをクリックするとデータベース接続オブジェクトも常に表示されますヌル..!! (それはPage_Loadの中で初期化されていても)助けてください..

た.ascxにはここにある:背後にあるコードにはここに

<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> 

です

:ボタンのクリックイベントで

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); 
     } 
} 

ハンドラbtnSavePref_Click()は、db接続オブジェクトm_DataAccessLayerは常にnullですが、LoadUserPreferences()の同じオブジェクト(これは貼り付けていません)は正常に動作しますが、 PLZはどこに間違っているのか、誰かが詳細を必要としているかどうかを案内します

+1

:コードを移動さ私は何を示唆

は、ページのロードやボタンのクリックハンドラの両方からこのメソッドを呼び出すと、その後別のメソッドにデータアクセス層を作成します。私たちに教えてください。 –

+0

は使用しましたか?IsPostback – Prabhavith

+0

@ShadowWizard:?? – Viniez

答えて

0

私はUpdatePanelの仕組みに慣れていませんが、おそらくPage_Loadメソッドをバイパスするように定義しました。私たちは盲目だ、関連するコードがなければ

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); 
} 
関連する問題