【发布时间】:2015-03-19 02:11:00
【问题描述】:
好的,所以我在 ASP.NET 中创建了一个自定义日历(我发现的免费日历不符合我的需要,或者太笨重,而付费日历也不是免费的)。我正在使用许多 UpdatePanel 来允许更改月份和显示日历。
基本上流程是这样的,上面的UpdatePanel包含三个LinkButtons lbPrev、lbCurr和lbNext和一个Label lblYear。 lbPrev 将日历切换到上个月,lbNext 切换到下个月,而 lbCurr 什么都不做——我只是还没有将其更改为标签(单击它时我可能会添加一些内容——比如每月显示,我不确定) .
当单击其中任何一个时,UpdatePanel 会完全按照预期工作,只更新面板本身,而不是完整的回发。
UpdatePanel 的第二个,我们称之为 udpCalMain,包含日历的核心(所有日期),这是通过动态呈现 LinkButton 的 asp:Placeholder 控件完成的(它们的文本是几个 div和一张图片)。
这个想法是,当您单击日历上动态创建的日期单元格之一时,系统会使用当天数据库中的相关详细信息更新第三个 UpdatePanel“udpDisplay”。
现在,发生的情况是,每当您单击任何日期时,页面都会被强制执行完整的回发 - 我知道这是因为动态创建的 LinkButton 呈现为简单标记,这会自动强制回发。
我尝试做的是创建一个 AsyncPostBackTrigger 并为每个动态创建的 LinkButton 附加它。但是,我无法(在 PlaceHolder 控件内)找到控件列表及其 ID,以便我可以附加此触发器。
我们将不胜感激有关这样做或以其他方式避免完整回发的任何帮助。
这是我用来附加 AsyncPostBackTrigger 的代码:
AsyncPostBackTrigger apbtDate = new AsyncPostBackTrigger();
apbtDate.ControlID = "ctl00$cpMain$CalendarBase$ctll01"; //Just an example
apbtDate.EventName = "Click";
udp1.Triggers.Add(apbtDate);
这里是更新面板的显示代码:
<asp:UpdatePanel ID="udp1" runat="server" EnableViewState="True" ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<div style="width: 700px; float: left">
<div style="width: 700px; text-align: center">
<asp:Label ID="lblYear" runat="server" />
</div>
<div style="float: left; width: 200px; text-align: center">
<asp:LinkButton ID="lbPrev" runat="server" OnClick="lbPrev_Click" />
</div>
<div style="float: left; width: 300px; text-align: center">
<asp:LinkButton ID="lbCurr" runat="server" />
</div>
<div style="float: left; width: 200px; text-align: center">
<asp:LinkButton ID="lbNext" runat="server" OnClick="lbNext_Click" />
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="udpCalMain" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
<div style="width: 700px; height: 700px">
<asp:PlaceHolder ID="phCalendar" runat="server" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<asp:UpdatePanel ID="udpDisplay" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
<ContentTemplate>
<div style="width: 300px; float: left; height: 35px">
</div>
<div style="width: 300px; float: left">
<asp:Label ID="lblTest" runat="server" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
基本上,我需要一种在占位符内创建不会导致完整回发的可点击元素的方法。任何帮助将不胜感激。
【问题讨论】:
-
在我看来,您想要的只是一个 ajax 调用来获取当天的“相关细节”。这将是最快/最简单的,除非您有充分的理由不这样做。
标签: c# asp.net updatepanel linkbutton dynamic-controls