背景:我正在 .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">×</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++;
}
}
}
}
}
提前致谢!同时,我也会继续努力,看看是否有任何解决方案......