updatepanel

تصویر hamid.elmi

سلام

می خوام در مورد استفاده از چند updatepanel در asp.net صحبت کنم . به صورت پیش فرض وقتی از چند updatepanel توی یک صفحه استفاده می کنیم با update شدن یکی از آنها بقیه updatepanel ها هم update می شن که البته در بعضی شرایط مطلوب نیستن.
مثال زیر رو نگاه کنید :

<form id="form1" runat="server">
	<asp:ScriptManager ID="ScriptManager1" runat="server">
	</asp:ScriptManager>
	<asp:UpdatePanel ID="UpdatePanel1" runat="server">
		<ContentTemplate>
			<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
			<br />
			<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
		</ContentTemplate>
	</asp:UpdatePanel>
	<asp:UpdatePanel ID="UpdatePanel2" runat="server">
		<ContentTemplate>
			<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
			<br />
			<asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" />
		</ContentTemplate>
	</asp:UpdatePanel>
</form>
protected void Button1_Click(object sender, EventArgs e)
{
	Label1.Text += "a";
	Label2.Text += "b";
}

protected void Button2_Click(object sender, EventArgs e)
{
	Label1.Text += "a";
	Label2.Text += "b";
}

با کد ساده بالا با هر بار کلیک روی یکی از دکمه ها یک کاراکتر به label اضافه میشه، و طبق حالت پیش فرض updatepanel هر دو updatepanel به client ارسال می شوند ( به همراه یک سری اطلاعات دیگه مثل viewstate و ...). خوب حالا اگه بخواهیم فقط همون updatepanel که دکمه داخل اون کلیک شده update بشه کافیه دو تا attribute زیر رو به updatepanel ها اضافه کنیم :

  • UpdateMode : که از اسمش مشخصه چه کار می کنه و یکی از این دو مقدار رو باید بهش بدیم : Always یا Conditional
    مشخص می کنه که آیا همیشه updatepanel به روز میشه یا باید تحت trigger به روز بشه.
  • ChildrenAsTriggers : مشخص می کنه که event های کنترل های داخلش به عنوان trigger در نظر گرفته بشن.

پس اگه UpdateMode="Conditional" ChildrenAsTriggers="true" رو به هر دوتا updatepanel اضافه کنیم نتیجه این میشه که فقط همون updatepanel که دکمه کلیک شده توی اون بوده update بشه ، البته یک نکته هم این که علاوه بر محتوای updatepanel مربوطه viewstate هم به clientارسال میشه و این باعث میشه که اگه در کد دکمه updatepanel اول یکی از مقادیر updatepanel دوم رو عوض کنیم ، در update بعدی updatepanel دوم مقادیر تغییر داده شده وجود داشته باشند.
به دو روش دیگه هم میشه updatepanel رو به روز کرد : یکی استفاده از متد Update خود updatepanel و یا استفاده از تعریف AsyncPostBackTrigger در قسمت trigger.

که در مورد استفاده از متد Update ، به طور صریح در سمت سرور مشخص می کنیم که می خواهیم updatepanel به روز شود ولی اگر از AsyncPostBackTrigger استفاده شود در هنگاه رخداد رویداد خاص از یک کنترل ، محتوایات Updatepanel به روز میشود.
PostBackTrigger یکی دیگه از option های موجود در قسمت trigger است که با معرفی یک کنترل به این قسمت ، به جای به روز شدن updatepanel ، صفحه رو postback میکنه.