上一篇讲述了如何使用UpdatePanel的UpdateMode属性限制只有本UpdatePanel里面的控件所引发的更新才使UpdatePanel更新有效。那么与这个属性很相关的一个属性就是ChildrenAsTriggers 。ChildrenAsTriggers 属性有两个可选值,一个是false,一个是true。如果设为false,则说明此UpdatePanel不进行自动更新。但可以手动更新,如果设置为 true,则这个UpdatePanel自动更新。上一篇说到把UpdatePanel的UpdateMode设置为Always,则不管是页面中任何控件引发的事件,都会导致UpdatePanel进行更新,那么如果把UpdatePanel的ChildrenAsTriggers 值设置为false的话,则说UpdatePanel不进行自动更新,那么这样不是产生矛盾了吗,一个要更新,一个又阻止更新,的确,这样的设置方法是不行的。也就是说UpdateMode=Always, ChildrenAsTriggers =false这种组合是不行的,如果ChildrenAsTriggers =false,则UpdateMode必须设置为conditional。
为了说明效果,我再引用上一节所引用的例子,如下所示:
1
<% @ Page Language = " C# " AutoEventWireup = " true " CodeFile = " Default2.aspx.cs " Inherits = " Default2 " %> 2
3
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > 4
5
< html xmlns ="http://www.w3.org/1999/xhtml" > 6
< head runat ="server" > 7
< title > 无标题页 </ title > 8
</ head > 9
< body > 10
< form id ="form1" runat ="server" > 11
< div > 12
< asp:ScriptManager ID ="ScriptManager1" runat ="server" > 13
</ asp:ScriptManager > 14
< asp:UpdatePanel ID ="UpdatePanel1" runat ="server" > 15
< ContentTemplate > 16
<% = DateTime.Now %> 17
< asp:Button ID ="Button1" runat ="server" Text ="Button" /> 18
</ ContentTemplate > 19
</ asp:UpdatePanel > 20
< hr /> 21
< asp:UpdatePanel ID ="UpdatePanel2" UpdateMode ="Conditional" ChildrenAsTriggers ="false" runat ="server" > 22
< ContentTemplate > 23
<% = DateTime.Now %> 24
< asp:Button ID ="Button2" runat ="server" Text ="Button" /> 25
</ ContentTemplate > 26
</ asp:UpdatePanel > 27
</ div > 28
</ form > 29
</ body > 30
</ html > 31
上面所显示的代码中,我们可以看到,也是放置了两个UpdatePanel,也是显示时间,但是第二个UpdatePanel设置了 ChildrenASTriggers为False,则这样,在执行的时候,第二个updatepanel不管是点哪个按钮,都不会自动刷新,因为这样的设置,如果把updateMode,设置为always,则会出现这样的错误:
这正说明了我们上述提到的那种异常结果。
ChildrenAsTriggers cannot be set to false when UpdateMode is set to Always on UpdatePanel 'UpdatePanel2'.
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidOperationException: ChildrenAsTriggers cannot be set to false when UpdateMode is set to Always on UpdatePanel 'UpdatePanel2'.
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 |
堆栈跟踪:
[InvalidOperationException: ChildrenAsTriggers cannot be set to false when UpdateMode is set to Always on UpdatePanel 'UpdatePanel2'.] |
本文详细解析了ASP.NET AJAX中UpdatePanel控件的ChildrenAsTriggers及UpdateMode属性的作用与相互间的约束关系,并通过示例代码展示了不同属性配置下UpdatePanel的行为差异。
2744

被折叠的 条评论
为什么被折叠?



