PDA

View Full Version : !Page Life Cycle



mahani
دوشنبه 27 اسفند 1386, 12:29 عصر
من کلی تو سایتهای دیگه گشتم بعدم تو این سایت و چیزای زیادی دستگیرم شد ولی هنوز با یه چیزی مشکل دارم!
من یه button و یه placeholder بصورت static درست کردم


<form id="form1" runat="server">
<div>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
<asp:Button ID="Button1" runat="server" Text="Submit"/>
</div>
</form>

کد 1:

protected overridevoid OnInit(EventArgs e)
{
base.OnInit(e);
CreateText();
}

کد 2:

protected overridevoid LoadViewState(object savedState)
{
base.LoadViewState(savedState);
CreateText();
}

کد 3:

protected void Page_Load(object sender, EventArgs e)
{
CreateText();
}

کد 4:


private TextBox txt;

private void CreateText()
{
txt = new TextBox();
txt.ID = "myText";
PlaceHolder1.Controls.Add(txt);
}


اگر در codebehind فقط از کد (1و4) یا (2و4) یا (3و4) استفاده کنیم و بعد از load شدن page در textbox مثلا 123 تایپ کنیم و button را بمنظور postback کلیک کنیم مشاهده میشود که در هنگام postback کد 1 یا 2 یا 3 فراخوانی و بعد CreateText هم فراخوانی میشود. تا قبل از اتمام کد 1 یا 2 یا 3 مقدار ""=txt.Text میشود.
حالا چرا به محض اتمام کد 1 یا 2 یا 3 مقدار "123"=txt.Text میشود؟
یا میتونم سوال رو جوره دیگه مطرح کنم! کد 1 یا 2 یا 3 در سه مرحله متفاوت از life cycle هستند ولی انگار بعد از اتمام هر کدام اطلاعات از viewstate خوانده شده و به controlها انتقال میابد!!!

mahani
پنج شنبه 08 فروردین 1387, 19:54 عصر
کسی واقعا نظری نداره!

Behrouz_Rad
پنج شنبه 08 فروردین 1387, 20:17 عصر
TextBox جزء کنترل هایی هست که مقدارش در ViewState قرار نمی گیره و از طریق POST رد و بدل میشه.

موفق باشید.

mahani
پنج شنبه 08 فروردین 1387, 21:58 عصر
اگر بخوام مقدار کنترلها از جمله TextBox و Label در ViewState قرار بگیره باید چکار کنم؟

Behrouz_Rad
پنج شنبه 08 فروردین 1387, 23:16 عصر
منظورت واضح نیست.
مسلما منظورت ViewState["myState"] = Value نیست!

mahani
جمعه 09 فروردین 1387, 15:47 عصر
نه منظورم اینه که خودم در ViewState ذخیره نکنم چون ممکنه UserControl پر از TextBox و Label باشه

Behrouz_Rad
جمعه 09 فروردین 1387, 18:38 عصر
کمی برای سوال خودتون وقت بگذارید تا زودتر به جواب برسید. متوجه منظورت نشدم.

mahani
شنبه 10 فروردین 1387, 01:45 صبح
شرمنده سوال رو بد گفتم! اگر بخواهیم مقادیر کنترلهای داینامیک از جمله UserControl که شامل چندین TextBox و Label هست رو ذخیره کنیم که در PostBack مقادیر عوض نشود بهترین را چیست؟
1-مقادیر هر کنترل را در ViewState ذخیره کنیم و در PostBack بازیابی کنیم
2-در OnInit از کنترلها instance بگیریم و بگذاریم خود NET. مقادیر را در ViewState ذخیره و بازیابی کند
3-راه بهتر دیگه!!!

Behrouz_Rad
شنبه 10 فروردین 1387, 01:51 صبح
استانداردی که در کتاب های طراحی کنترل بیان شده، از جمله کتاب معروف Nikhil Kothari - ذخیره ی وضعیت کنترل ها در ViewState به صورت ایجاد Property برای هر خاصیت هست. ضمن اینکه توصیه میشه این Property ها از نوع virtual باشن تا توسعه گران بتونن اونها رو Override کنن.

موفق باشید.

mahani
شنبه 10 فروردین 1387, 13:20 عصر
اگه تعداد Controlها متغیر باشه چی؟

Behrouz_Rad
شنبه 10 فروردین 1387, 14:06 عصر
مقادیر Composite Control ها رو باید در یک آرایه از نوع object قرار بدی و در روال های SaveViewState و LoadViewState، اِعمال و بازیابی کنی.

موفق باشید.

mahani
شنبه 10 فروردین 1387, 14:35 عصر
پس یه جورایی باید خودمون مقادیر رو Save و Load کنیم و NET. بطور اتوماتیک نمیتونه این کار رو بکنه!