我正在使用C#代码在ASP.NET网站上工作。
现在,当我以编程方式创建自定义控件时,麻烦就开始了。控件显示在面板中,但是当我单击控件的其中一个按钮时,它什么都不做。如果我单击它们两次,则用户控件将消失。
使用调试器,我发现它正在进行回发,这很奇怪,因为我尝试使用按钮并将usesubmitbehavior
设置为false
;它还在发送回传。
以下是在default.aspx
文件
<asp:UpdatePanel runat="server" ID="contentHolderUpdatePanel"
UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel runat="server" ID="contentPanel">
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
以下是来自控件ListadoAuditoria
的ASPX。
<asp:UpdatePanel runat="server" ID="auditorTableUpdatePanel" UpdateMode="Conditional">
<ContentTemplate>
<asp:Table runat="server" ID="auditorTable" BorderWidth="0" Width="100%">
<asp:TableHeaderRow HorizontalAlign="Center">
<asp:TableHeaderCell>Button
</asp:TableHeaderCell>
</asp:TableHeaderRow>
</asp:Table>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel runat="server" ID="formHolderUpdatePanel" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label runat="server" ID="testLabel" Text="bbbbbbbbbbbbb" ></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
按钮调用的方法应该将标签testLabel
的文本从“bbbbbbbbbbbbb”更改为“aaaaaaaaaaa”。我修改文本后显然正在做auditorTableUpdatePanel.Update()
。
控制CS
protected void Page_Load(object sender, EventArgs e)
{
loadAudits();
}
public void loadAudits()
{
for(int i=0;i<10;++i)
{
TableRow row = new TableRow();
TableCell cell1 = new TableCell();
ImageButton deleteButton = new ImageButton();
deleteButton.ImageUrl = "~/image.gif";
deleteButton.Click += generateNewPart;
deleteButton.EnableViewState = true;
deleteButton.ID = i.ToString();
cell1.Controls.Add(deleteButton);
row.Cells.Add(cell1);
auditorTable.Rows.Add(row);
}
}
public void generateNewPart(object sender, EventArgs e)
{
tumadre.Text = "aaaaaaaaaaaa";
formHolderUpdatePanel.Update();
}
这是我生成控件并将其插入面板时的代码:
Panel panel = (Panel)Page.FindControl("contentPanel");
UpdatePanel updatePanel = (UpdatePanel)Page.FindControl("contentHolderUpdatePanel");
ListadoAuditorias listadoAuditorias = (ListadoAuditorias)LoadControl("~/CargaDeAuditoria/ListadoAuditorias.ascx");
panel.Controls.Add(listadoAuditorias);
updatePanel.Update();
我查看了互联网并没有找到任何东西。
答案 0 :(得分:1)
我不确定动态添加控件的代码究竟在哪里,但必须在每次回发时调用它以重新添加控件。你不能只添加一次而忘记它。当您回发时,页面将使用您的aspx页面中的标记重新呈现(显然没有动态控件)。动态添加的控件中的值仍将在ViewState中,但不会重新呈现控件。
答案 1 :(得分:0)
我不完全确定我在看什么;我不知道“控件代码”是否是您正在加载的ListadoAuditorias控件的代码。如果是这样,我没有注意到任何按钮。
所以我在这里可能是错的,但是我看到的第一件事就是你看起来正在加载ListadoAuditorias控件然后将它添加到普通的Panel控件中。如果ListadoAuditorias中的一个控件触发回发,并且它不包含在UpdatePanel中,那么是的,我希望页面进行回发并重新加载,除非您已将ChildrenAsTriggers和UpdateMode属性指定为除了他们的默认值(我认为)。所以我建议你看一下你添加控件的位置。如果这是你的意图,请确保它们包含在UpdatePanel中。
另请注意,Button控件的UseSubmitBehavior属性不会阻止按钮启动回发。该属性仅确定按钮是呈现为<input type="submit" />
还是<input type="button" />
。在后一种情况下(当您将UseSubmitBehavior设置为false时)控件仍会在HTML元素的onclick属性中呈现javascript以导致回发。