کنترل UpdatePanel قسمت دوم
سلام
کنترل UpdatePanel قسمت دوم
خوب دوستان تا اینجا فهمیدیم که اگر کنترل هایی رو در بلاک UpdatePanel و تگ ContentTemplate قرار بدیم می تونیم اون عناصر رو بروزرسانی جزیی کنیم
حالا درس این جلسه
در کنترل UpdatePanel به جز تگ ContentTemplate تگ دیگری وجود داره به نام Triggers که الآن کارش رو با یه مثال توضیح میدم
ما توی صفحه یک سری کنترل داریم که چند تا از اونها در بلاک UpdatePanel قرار داره و ما می خواهیم وقتی روی یه دکمه که توی بلاک UpdatePanel نیست کلیک می کنیم عملیات بروزرسانی جریی انجام بشه
خوب باید چیکار کنیم؟
هیچی فقط کافیه که در بلاک UpdatePanel از تگ Triggers استفاده کنید
** اجازه بدین قبل از اینکه بحث رو ادامه بدم یه نکته رو بگم و اون اینکه در تگ Triggers دوکنترل asp به نام های AsyncPostBackTrigger و PostBackTrigger وجود داره که هر دو عملیات بروزرسانی را انجام می دهند ولی یه تفاوت داره که در ادامه میگم **
ادامه آموزش
حالا توی تگ Triggers چی باید بزاریم
اول یه کنترل asp:AsyncPostBackTrigger قرار میدیم بعد خصوصیت ControlID را با نام کنترلی که قرار عملیات PostBack رو در خارج از بلاک UpdatePanel انجام بده ست می کنیم و خصوصیت EventName رو با رویدادی که قرار عملیات PostBack رو انجام بده پر می کنیم
حالا کار تمومه و می تونید عملیات بروزرسانی جزیی رو در خارج از بلاک UpdatePanel انجام بدین
و اما تفاوت AsyncPostBackTrigger و PostBackTrigger
تفاوت این دو تا در اینه که کنترل AsyncPostBackTrigger عملیات بروزرسانی رو به صورت جزیی انجام میده یعنی فقط محتویات درون UpdatePanel رو بروزرسانی می کنه ولی کنترل PostBackTrigger عملیات بروزرسانی رو به طور کامل انجام میده یعنی کل صفحه بروز میشه
شاید این سوال براتون پیش بیاد که چرا باید از PostBackTrigger استفاده کنیم؟
شما وقتی یه کنترل UpdatePanel رو به صفحه اضافه میکنید به طور پیش فرض خصوصیتChildrenAsTrigger با True و خصوصیتUpdateMode با Always ست می شوند که معنی هر کدوم رو الان توضیح میدم
خصوصیت ChildrenAsTrigger به شما می گه که کنترل های درون بلاک UpdatePanel بدون اینکه توی Triggers قرار بگیره به عنوان Trigger کنترل UpddatPanel باشه با نه که اگر True باشه هر کنترلی که در بلاک UpdatePanel فرار داره و عملیات PostBack رو انجام میده بروزرسانی جزیی میکنه
و خصوصیت UpdateMode که دارای دو مقدار Always و Conditional هست نوع بروزرسانی رو مشخص میکنه
که حالت Always به معنی اینکه وقتی عملیات PostBack توی بلاک UpdatePanel به وسیله هر کنترلی انجام شد بروزرسانی جزیی صورت بگیره و حالت Conditional یعنی عملیات PostBack فقط توسط کنترل هایی که در تگ Triggers قرار داره انجام بشه
حالا برای چی این توضیح ها رو دادم؟
بعضی وقتها شما می خواید یه کنترلی رو داخل بلاک UpdatePanel قرار بدین ولی با عملیات PostBack اون بروزرسانی جزیی انجام نشه بلکه کل صفحه بروزسانی بشه برای اینکار کافیه از کنترل PostBackTrigger در تگ Trigger استفاده کنید
مثال
ما برای این حالت از همون مثال قسمت اول استفاده می کنیم فقط کنترل Button با نام btnRefresh رو خارج از بلاک UpdatePanel و کنترل Button2 رو درون بلاک UpdatePanel قرار می دهیم و هر دو را با کنترل های داخل Triggers معرفی می کنیم
قسمت Body
کد:
<body>
<formid="form1"runat="server">
<div>
<asp:ImageID="Image1"runat="server"ImageUrl="~/Naser.gif"/>
<br/>
<asp:ScriptManagerID="ScriptManager1"runat="server">
</asp:ScriptManager>
<asp:UpdatePanelID="UpdatePanel1"runat="server">
<ContentTemplate>
<asp:LabelID="lblTime"runat="server"></asp:Label>
<br/>
<asp:ButtonID="Button2"runat="server"Text="Button"/>
<br/>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTriggerControlID="btnRefresh"EventName="click"/>
<asp:PostBackTriggerControlID="Button2"/>
</Triggers>
</asp:UpdatePanel>
<asp:ButtonID="btnRefresh"runat="server"Text="RefreshTime..."/>
</div>
<div>
</div>
</form>
</body>
و بقیه تنظیمات هم مانند مثال قبل
در این مثال هم مانند مثال قسمت قبل وقتی روی btnRefresh کلیک کنید بروزرسانی جزیی و وقتی روی Button کلیک می کنید کل صفحه بروزرسانی میشه فقط تفاوتش اینکه اینبار btnRefresh خارج و Button2 داخل بلاک UpdatePanel قرار داره
یاعلی