我觉得我面临着一个愚蠢的问题而且我在某个地方错过了一件小事,但我真的不明白:/
我有一个包含面板的向导步骤。 我动态添加到此面板按钮,并为这些按钮的click事件分配一个事件处理程序。
点击事件处理程序中的代码不会起作用,它有点让我感到沮丧,因为它看似简单而愚蠢,但仍然无法工作并且花费了太多时间。
如果你们其中一个人会看一看并且看看我没看到的东西,那会很棒。
PS:我对ASP .NET并不熟悉
这里是代码的一部分:
向导步骤:
<asp:WizardStep ID="step1" runat="server" StepType="Complete" OnActivate="step1_Activate">
<asp:Panel ID="panelID" runat="server" ScrollBars="Both" />
<asp:Button ID="btnBack" runat="server" CssClass="bigButton" Text="<%$Resources: WebResources, CommonButtonBackText %>" OnClick="btnBack_Click" />
</asp:WizardStep>
这是step1_Activate
背后的代码:
try
{
panelID.Controls.Clear();
// Get list of asset dto for current user
var userId = long.Parse(Session["ID"].ToString());
var userDtos = presenter.DoSomething(userId );
// Create buttons container
foreach (var button in userDtos.Select(dtoProperty => new Button() { Text = dtoProperty.ToString(CultureInfo.InvariantCulture) }))
{
button.Click += new EventHandler(button_Click);
button.Click += delegate
{
bossWiz.MoveTo(step2);
};
panelID.Controls.Add(button);
}
}
catch (Exception ex)
{
Log.Error(ex.Message);
bossWiz.MoveTo(stepError);
}
点击内部的调试器永远不会触发! 该视图刚刚在向导步骤1中刷新。
有人可以告诉我,我做错了吗?
答案 0 :(得分:1)
必须在每次回发时重新创建动态控件,this Article是关于如何保持动态控件及其状态的良好链接。
当您意识到Page只是一个类的实例并且为每个请求创建了一个新实例时,您会发现在执行回发时您的动态控件将不存在,并且您需要重新创建它们。 / p>
您应该将重新创建控件所需的状态存储到viewstate中,然后在每次回发时基于此CreateChildControls内部构建控件。
答案 1 :(得分:0)