ASP.NET AJAX工具包CalendarExtender无法正常工作C#

时间:2009-11-20 11:16:48

标签: asp.net ajaxcontroltoolkit

我有一个以下问题: 我有一个页面,我需要从后面的代码动态创建许多元素。它显然取决于从数据库传递的内容,但元素的数量可以改变,这就是我不能静态的原因。

我现在所拥有的是:

我已经静态创建了PANEL:

<asp:Panel ID="pFullInfo_lStartDateStr" runat="server"></asp:Panel>

然后在Code Behind中,我正在创建其他控件并将它们添加到我的Label中。我遇到的问题是单击iEditStartDateCalendar后应该出现的CalendarExtender没有弹出:(我看不出我在这里做错了什么?请帮忙吗?!?!

// StartDate
Label lStartDateSite = new Label();
pFullInfo_lStartDateStr.Controls.Add(lStartDateSite);

Label lStartDate = new Label();
pFullInfo_lStartDateStr.Controls.Add(lStartDate);

ImageButton ibEditStartDate = new ImageButton();
ibEditStartDate.ID = "ibEditStartDate_" + this_site_id;
pFullInfo_lStartDateStr.Controls.Add(ibEditStartDate);

TextBox tbEditStartDate = new TextBox();
pFullInfo_lStartDateStr.Controls.Add(tbEditStartDate);

Image iEditStartDateCalendar = new Image();
iEditStartDateCalendar.ID = "iEditStartDateCalendar";
iEditStartDateCalendar.ImageUrl = "~/i/small/calendar.png";
iEditStartDateCalendar.ImageAlign = ImageAlign.AbsMiddle;
pFullInfo_lStartDateStr.Controls.Add(iEditStartDateCalendar);

CalendarExtender ceEditStartDate = new CalendarExtender();
ceEditStartDate.ID = "ceEditStartDate_" + this_site_id;
ceEditStartDate.PopupButtonID = iEditStartDateCalendar.UniqueID;
ceEditStartDate.TargetControlID = tbEditStartDate.UniqueID;
ceEditStartDate.PopupPosition = CalendarPosition.Right;
pFullInfo_lStartDateStr.Controls.Add(ceEditStartDate);

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。 问题在于我传递的“UniqueID”。 正确的解决方案在这里:


// StartDate
Label lStartDateSite = new Label();
pFullInfo_lStartDateStr.Controls.Add(lStartDateSite);

Label lStartDate = new Label();
pFullInfo_lStartDateStr.Controls.Add(lStartDate);

ImageButton ibEditStartDate = new ImageButton();
ibEditStartDate.ID = "ibEditStartDate_" + this_site_id;
pFullInfo_lStartDateStr.Controls.Add(ibEditStartDate);

TextBox tbEditStartDate = new TextBox();
pFullInfo_lStartDateStr.Controls.Add(tbEditStartDate);
tbEditStartDate.ID = "tbEditStartDate_" + this_site_id;

Image iEditStartDateCalendar = new Image();
iEditStartDateCalendar.ID = "iEditStartDateCalendar";
iEditStartDateCalendar.ImageUrl = "~/i/small/calendar.png";
iEditStartDateCalendar.ImageAlign = ImageAlign.AbsMiddle;
pFullInfo_lStartDateStr.Controls.Add(iEditStartDateCalendar);

CalendarExtender ceEditStartDate = new CalendarExtender();
ceEditStartDate.ID = "ceEditStartDate_" + this_site_id;
ceEditStartDate.PopupButtonID = iEditStartDateCalendar.ID;
ceEditStartDate.TargetControlID = tbEditStartDate.ID;
ceEditStartDate.PopupPosition = CalendarPosition.Right;
pFullInfo_lStartDateStr.Controls.Add(ceEditStartDate);

所以我做了基本的,我为TextBox和Image分配了一个ID用于日历,并且工作正常:] 非常感谢Stack Overflow:]

答案 1 :(得分:1)

通常,在标记中添加日历扩展程序时,您只需将PopupButtonIDTargetControlID设置为这些控件的ID,而不是UniqueID。< / p>

在动态添加“标签”之类的内容时,将AssociatedControlID设置为控件的ID,而不是UniqueID / ClientID,框架在渲染时将其运行。

此外,大多数JavaScript库都希望您使用控件的实际ID,而不是name属性,因此您应该使用ClientID代替。