Panel.controls 生成时返回 null

时间:2021-01-10 07:47:35

标签: c# asp.net webforms bootstrap-modal panel

背景:我正在 .Net 框架 4.7.2 中实现一个 asp.net 网络表单。

我目前正在尝试从面板中生成的控件中检索值列表。请注意,面板位于模态内。

aspx 代码

<div class="modal fade" id="addLead" tabindex="-1" role="dialog" aria-labelledby="addLead" aria-hidden="true">
  <div class="modal-dialog modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">Add New Lead</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <div class="row">
            <div class="col-lg-12">
                <asp:Panel ID="panelAddAdditionalLeads" runat="server"></asp:Panel>
            </div>
        </div>
      </div>
      <div class="modal-footer">
        <asp:Button ID="btnAddNewRow" runat="server" class="btn btn-secondary mr-auto mr-auto" Text="+ Add Next Lead" OnClick="btnAddNewRow_Click" />
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <asp:Button ID="btnAdd" runat="server" class="btn btn-outline-secondary" Text="Add" UseSubmitBehavior="false" OnClick="btnAdd_Click" data-dismiss="modal"/>  
      </div>
    </div>
  </div>
</div>

控件都成功生成,但是当点击按钮(创建静态)时,当我尝试执行以下操作时返回null(在按钮点击函数[btnAdd_Click]中):

List<string> currentPanelData = new List<string>();
if (panelAddAdditionalLeads.HasControls())
{
    foreach (Control control in panelAddAdditionalLeads.Controls)
    {
        if (control is TextBox)
        {
            if (!string.IsNullOrEmpty(((TextBox)control).Text))
            {
                currentPanelData.Add(((TextBox)control).Text);
            }
            else
            {
                currentPanelData.Add("");
            }
        }
        if (control is DropDownList)
        {
            currentPanelData.Add(((DropDownList)control).SelectedValue);
        }
    }
}

我一直在寻找解决方案,如果还有其他替代方法,我也很乐意探索。

我也使用了 Page_PreInit 来加载控件,但效果不佳。 这是 Page_PreInit 中使用的代码:

private void LoadControls()
        {
            List<string> currentPanelData = new List<string>();
            if (Session["CurrentDataList"] != null)
            {
                currentPanelData = (List<string>)Session["CurrentDataList"];
            }

            int loopCount = 0;
            //To load previous controls data
            if (currentPanelData.Count >= 1)
            {
                foreach (Control control in this.panelAddAdditionalLeads.Controls)
                {
                    if (loopCount < currentPanelData.Count)
                    {
                        if (control is TextBox)
                        {
                            ((TextBox)control).Text = currentPanelData[loopCount];
                            loopCount++;
                        }

                        if (control is DropDownList)
                        {
                            ((DropDownList)control).SelectedValue = currentPanelData[loopCount];
                            loopCount++;
                        }
                    }
                }
            }
        }

提前致谢!同时,我也会继续努力,看看是否有任何解决方案......

0 个答案:

没有答案