页面范例15 - 示范何时需要将UpdatePanel的触发器设定成由其内部的控件事件来引发
图3-78所示的是页面范例CH3_DemoForm029.aspx的执行画面,相信大家对于这一个书籍购物车界面必定不会感到陌生。
我们第一次编写这个书籍购物车界面是在“3.4探讨UpdatePanel控件内容的更新时机”一节的页面范例CH3_DemoForm014.aspx,由于当时尚未学习触发器,因此为了让用户点选某一本书籍的书名超级链接时能够引发异步回送并局部更新右侧的书籍明细,我们将作为书籍清单的DataList控件摆在UpdatePanel控件中,现在看来,当时不应该这么做,原因是书籍清单的外观根本不需要更新。
第二次编写这个书籍购物车界面是在本节中我们学习了触发器之后,也就是稍早的“页面范例6 -异步的书籍目录查看界面”的CH3_DemoForm020.aspx。由于作为书籍清单的DataList控件的外观固定保持不变,因此不需要进行任何更新,也就是说,不需要把它摆在一个UpdatePanel控件中。然而为了让用户在点选其书名超级链接时能够引发异步回送并局部更新右侧的书籍明细,我们替书籍明细所在的UpdatePanel控件的Triggers属性定义一个由书籍摘要清单的DataList控件的SelectedIndexChanged事件所引发的AsyncPostBackTrigger触发器。
现在我们第三次编写这个书籍购物车界面,为何要这样做呢?与过去两次有何差异呢?从图3-78可以看出,这次所编写的界面与过去两次最大的不同,就是我们提供了一个“刷新书籍清单”的超级链接,当用户单击此超级链接,就会异步局部更新书籍清单所在的UpdatePanel控件,以便使后端数据库的最新书籍数据变动立刻反映于书籍清单中。为了实现这一功能,我们在界面的设计上必须做出下列操作:
|
|
•书籍清单所在的UpdatePanel控件只有在用户单击“刷新书籍清单”超级链接时才需要被更新,而在用户单击书名超级链接时,书籍清单本身并不需要更新,否则将造成无谓的回送与更新而降低效率。欲达此目的,您必须将书籍清单所在的UpdatePanel控件的ChildrenAsTriggers属性设定成False。
•由于“刷新书籍清单”超级链接与书籍清单位于同一个UpdatePanel控件中,而我们刚刚已经将UpdatePanel控件的ChildrenAsTriggers属性设定成False,如此一来,虽然单击“刷新书籍清单”超级链接会引发异步回送,但是它本身所在的UpdatePanel控件并不会被更新。如何解决这一冲突呢?非常简单,您只需为UpdatePanel控件的Trigger属性定义一个由“刷新书籍清单”超级链接的Click事件所引发的AsyncPostBackTrigger触发器即可(如图3-80所示),其实这就是将UpdatePanel的触发器设定成位于由其内部的控件事件来引发的典型案例。
|
您必须为“刷新书籍清单”超级链接的Click事件处理函数编写下列程序代码:
protected void RefreshBookListButton_Click(object sender, EventArgs e) |
| 回书目 上一节 下一节 |