2016-07-15 4 views
0

私は連絡先のリストを読み込んで各連絡先の横にチェックボックスを置く関数を持っています。ダニを取得した連絡先は、メールを送信します。しかし、私の電子メール機能では、リストは常にゼロとして戻ってきます。HtmlGenericControlリストにnullが返され続ける

リストのためのコード:連絡先をロードする

<div id="viewMenuDropFollowup" style="top:0px;right:10px; text-align: left; display:none"> 
        <strong>Email to</strong> <a onclick="OpenEmail()" style="float:right;font-weight:bold;cursor:pointer">X</a> 
        <ul runat="server" id="ulCRMContacts"> 

        </ul> 
        <asp:TextBox runat="server" ID="txtEmailTo" ></asp:TextBox> 
        <asp:LinkButton runat="server" ID="btnEmail3" CssClass="btnEmail" OnClick="btnEmail_Click" Text="Email" ToolTip="Email to selected contacts" OnClientClick="return CheckEmail()"></asp:LinkButton> 
       </div> 
       <a id="btnOpenEmail" onclick="OpenEmail()" class="EmailClass"><strong>Email</strong></a> 

function OpenEmail() { 
     if (document.getElementById("viewMenuDropFollowup").style.display === "block") { 
      document.getElementById("viewMenuDropFollowup").style.display = "none"; 
     } else { 
      document.getElementById("viewMenuDropFollowup").style.display = "block"; 
     } 
    } 

コード:

protected void Page_Load(object sender, EventArgs e)  
{ 
    if (!Page.IsPostBack) 
    { 
     LoadContacts(); 
    }  
} 

    protected void LoadContacts() 
     { 
      Customer c = new Customer(int.Parse(CustomerID)); 

      foreach (Customer.CustomerContact cc in c.Contacts) 
      { 
       HtmlGenericControl li = new HtmlGenericControl("li"); 
       CheckBox cb = new CheckBox(); 
       cb.ID = "cbCRMContact_" + cc.ID; 
       cb.Checked = true; 
       if (!string.IsNullOrEmpty(cc.Email)) 
       { 
        cb.Text = cc.Email; 
        cb.TextAlign = TextAlign.Right; 
        li.Controls.Add(cb); 
        ulCRMContacts.Controls.Add(li); 
       } 
      } 

      GetControls(ulCRMContacts.Controls); 
     } 

私がコントロールを得ることができるかどうかを確認するために行GetControls(ulCRMContacts.Controls);を入れて、それがここでは正常に動作します。しかし私がGetControls(ulCRMContacts.Controls);を私の電子メール機能で再度呼び出すと、ゼロを返します。

protected void btnEmail_Click(object sender, EventArgs e) 
     { 
      if (EmailFollowup(new lookupCRMCustomerContact(Company.Current.CompanyID, int.Parse(Request.QueryString["CustID"])))) 
      { 
       DisplayMsg("Follow up has been emailed"); 
      } 
      else 
      { 
       DisplayMsg("An Error Occurred sending email. Please contact Support"); 
      } 
     } 

public bool EmailFollowup(lookupCRMCustomerContact q) 
{ 
     GetControls(ulCRMContacts.Controls); 
} 

それは、すぐにそれがLoadContacts機能を残すようulCRMContactsの値を失うようなものです。

+1

「EmailFollowup」と「LoadContacts」はいつ実行していますか? – Andrei

+0

@Andrei「LoadContacts」は、ページが読み込まれるとすぐに実行されます。電子メールボタンがクリックされるまで 'EmailFollowup'は実行されません – user123456789

+0

ボタンにAutoPostBack =" true "を設定した場合、問題があります。 LoadContacts()関数にif(!IsPostBack){..}という条件を入れる必要があります。 – Kami

答えて

1

あなたが(再)あまりにもすべてのポストバックでダイナミックなコントロールを作成する必要があり、これは動作しません。

protected void Page_Load(object sender, EventArgs e)  
{ 
    if (!Page.IsPostBack) 
    { 
     LoadContacts(); 
    }  
} 

!IsPostBack -checkを削除し、それが動作するはずです。それでも問題が発生した場合は、適切なイベントであるPage_Initに移動してください。

protected void Page_Init(object sender, EventArgs e)  
{ 
    LoadContacts(); 
} 
関連する問題