嘿大家我在Visual Studio中使用aspx并使用c#代码在页面加载时生成文本框,并将asynchronousPostBackTriggers添加到更新面板以触发这些文本框。
protected void PanelSans_OnLoad()
{
SumBox sanPanel = new SumBox();
sanPanel = (SumBox)ViewState["summaryBox"];
TextBox[] boxes = new TextBox[sanPanel.getDNSCount()];
Label[] labels = new Label[sanPanel.getDNSCount()];
AsyncPostBackTrigger[] triggers = new AsyncPostBackTrigger[sanPanel.getDNSCount()];
for(int i = 0; i < sanPanel.getDNSCount(); i++)
{
boxes[i] = new TextBox();
boxes[i].Attributes["PlaceHolder"] = "Enter Additional Domains";
boxes[i].ID = "SAN" + i;
boxes[i].AutoPostBack = true;
boxes[i].TextChanged += PanelSans_TextChanged;
boxes[i].Attributes["runat"] = "server";
labels[i] = new Label();
labels[i].Attributes["Value"] = "Label" + i;
triggers[i] = new AsyncPostBackTrigger();
triggers[i].ControlID = "SAN" + i;
triggers[i].EventName = "TextChanged";
}
for (int j = 0; j < sanPanel.getDNSCount(); j++)
{
/*this.Controls.Add(boxes[j]);
this.Controls.Add(labels[j]);*/
PanelSans.Controls.Add(boxes[j]);
PanelSans.Controls.Add(labels[j]);
SanUpdate.Triggers.Add(triggers[j]);
}
}
该方法获取先前在页面上生成并存储在视图状态内的信息,以确定创建了多少个框以及使用这些框创建了多少个触发器。我已经尝试在更新面板中添加一个硬编码到页面中的文本框以及触发器,因为我知道更新面板有效:
<asp:UpdatePanel ID="SanUpdate" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div id="divSanPrice" style="font-size:24px;" class="orange" runat ="server"></div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="sanPriceTest" EventName="TextChanged" />
</Triggers>
</asp:UpdatePanel>
我尝试过多次测试,例如为动态创建的文本框之一硬编码触发器,所做的一切都是阻止updatepanel一起工作。