Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET:按钮';s OnClick事件和匿名事件未触发_Asp.net - Fatal编程技术网

ASP.NET:按钮';s OnClick事件和匿名事件未触发

ASP.NET:按钮';s OnClick事件和匿名事件未触发,asp.net,Asp.net,我正在创建一个时间选择器用户控件,该控件首先显示当前日期的按钮,然后显示接下来几天的按钮: |今天|周一|周二|周三| 当用户单击其中一个按钮时,控件将在日期按钮下方显示一组小时按钮: |今天|周一|周二|周三| |7:00 | 8:00 | 9:00 | 10:00 | 11:00 |中午| 1:00 | 2:00| 到目前为止,我的控制效果还不错。然后,当用户单击一个小时按钮时,会出现一组分钟按钮(相隔5分钟): |今天|周一|周二|周三| |7:00 | 8:00 | 9:00 | 10:

我正在创建一个时间选择器用户控件,该控件首先显示当前日期的按钮,然后显示接下来几天的按钮:

|今天|周一|周二|周三|

当用户单击其中一个按钮时,控件将在日期按钮下方显示一组小时按钮:

|今天|周一|周二|周三|

|7:00 | 8:00 | 9:00 | 10:00 | 11:00 |中午| 1:00 | 2:00|

到目前为止,我的控制效果还不错。然后,当用户单击一个小时按钮时,会出现一组分钟按钮(相隔5分钟):

|今天|周一|周二|周三|

|7:00 | 8:00 | 9:00 | 10:00 | 11:00 |中午| 1:00 | 2:00|

|9:00 | 9:05 | 9:10 | 9:15 | 9:20 | 9:25 | 9:30 | 9:35|

与此相反,控件似乎自行重置,并返回到仅显示日期按钮的部分。小时按钮的OnClick事件甚至没有触发(我通过重载OnClick方法并在其中放入Page.Response.Write(“它的触发”)来测试它——当我在day按钮中将它放入重载的OnClick方法时,它确实起作用)

这是我的代码(所有内容都用代码放在用户控件上,.ascx标记页只包含标记):

public部分类时间选择器:System.Web.UI.UserControl
{
公共时间选择器()
{
this.Controls.Add(new TeeTimePanel());
}
私有类时间面板:面板
{
公共时间面板()
{
天数=新面板();
此.Controls.Add(天);
小时=新面板();
此.Controls.Add(小时);
分钟=新面板();
此.Controls.Add(分钟);
DayButton.CreateDayButtons(这个);
}
公共无效CreateHourButtons(日期时间日)
{
创建HourButton(日期,本);
}
公共void CreateMinuteButtons(日期时间)
{
CreateMinuteButtons(time.Date,time.Hour,this);
}
公共小组日、小时、分钟;
}
私有类DayButton:按钮
{
private DayButton(日期时间日,时间面板父级)
{
this.date=天;
如果(day.Date==DateTime.Today)
{
this.Text=“今天”;
}
其他的
{
this.Text=day.ToString(“dddd”);
}
此选项。单击+=委派
{
parent.CreateHourButtons(天);
};
}
私人日期时间日期;
公共静态void CreateDayButtons(时间面板父级)
{
对于(int i=0;i<5;i++)
{
DayButton b=新的DayButton(DateTime.Today.AddDays(i),父级);
父项.天数.控件.添加(b);
}
}
}
私有类小时按钮:按钮
{
私人小时按钮(日期时间日、整数小时、启用布尔值、时间面板父级)
{
this.Enabled=已启用;
this.time=day.Date.AddHours(小时);
如果(小时<12)
{
this.Text=hour.ToString()+“:00”;
}
否则,如果(小时==12)
{
此文本为“.Text=”正午“;
}
其他的
{
this.Text=(小时-12).ToString()+“:00”;
}
此选项。单击+=委派
{
parent.CreateMinuteButtons(day.AddHours(hour));
};
}
公共静态void CreateHourButtons(日期时间日,时间面板父项)
{
字典可用小时=新字典();
//这将随机生成可用小时数,并最终
//替换为访问数据库的代码
随机r=新随机();

对于(int i=7;i请确保重新生成回发上的控件,否则事件不会触发。

您说的没错,这更像是一个asp.net问题,而不是c#。您需要了解页面的生命周期。当我第一次开始使用webforms时,这让我感到有些不安,它吸引了很多新用户

初始化计时器选择器控件时,构造函数运行并调用此方法:DayButton.CreateDayButtons(this);该方法将创建DayButtons

this.Click += delegate
{
     parent.CreateHourButtons(day);
};
使用此代码,您试图在ASP.NET不知道的按钮上触发事件,因为该按钮是动态添加到页面中的。因此,正如ChaosPandion所述,控件在您再次添加它们之前不会存在于页面上,因此如何触发您的事件


在回发和获取值等方面,为我动态添加控件一直是一件令人头疼的事情。我个人会考虑这样做。

是否启用了viewstate?如果您添加了用于显示此控件的页面代码,这将非常有帮助。在default.aspx页面上,我在control的代码,TimePicker构造函数是显示控件的东西好吧,我理解这个想法。我重载了TimePanel构造函数两次,这样它就可以使用day和time参数:public TeeTimePanel(DateTime day,int hour){…DayButton.CreateDayButtons(this);HourButton.CreateHourButtons(day,this);MinuteButton.CreateMinuteButtons(day,hour,this);}我为TimePanel创建的两个新构造函数将重建控件,但我不知道如何让控件的构造函数public TimePicker()决定使用哪个TimePanel构造函数。
this.Click += delegate
{
     parent.CreateHourButtons(day);
};