HtmlGenericControl 列表不断返回 null

HtmlGenericControl list keeps returning null

提问人:user123456789 提问时间:7/15/2016 最后编辑:user123456789 更新时间:7/15/2016 访问量:224

问:

我有一个函数,可以加载联系人列表并在每个联系人旁边放置一个复选框。任何收到勾号的联系人都会收到一封电子邮件发送给他们。但是在我的电子邮件功能中,列表总是以零的形式返回。

列表代码:

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

这就像它一离开函数就会丢失值一样。ulCRMContactsLoadContacts

C# asp.net 列出 HTMLGenricControl

评论

1赞 Andrei 7/15/2016
你什么时候跑步,什么时候跑步?EmailFollowupLoadContacts
0赞 user123456789 7/15/2016
@Andrei在页面加载后立即运行。 在单击电子邮件按钮之前不会运行LoadContactsEmailFollowup
0赞 Kami 7/15/2016
如果你的按钮上有AutoPostBack=“true”,那么这就是你的问题。如果 (!IsPostBack){..} 在 LoadContacts() 函数中。
2赞 Andrei 7/15/2016
您能否发布调用这些方法的事件处理程序代码?这些都是重要的细节。
1赞 Andrei 7/15/2016
是的,正如我所怀疑的那样,这是最重要的部分。正如 Tim 已经多次建议的那样,您应该在每次回发时调用 LoadContacts。在Page_Load中消除您的条件,这应该可以做到if

答:

1赞 Tim Schmelter 7/15/2016 #1

您还必须在每次回发时(重新)创建动态控件,因此这不起作用:

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

删除 -check,它应该可以工作。如果仍有问题,请将其移至相应的事件。!IsPostBackPage_Init

protected void Page_Init(object sender, EventArgs e)    
{
    LoadContacts();   
}