PDA

View Full Version : چرا onInit بهترین جا برای رجیستر کردن event های کنترل های سروری هست



amirjalili
دوشنبه 29 شهریور 1389, 15:51 عصر
چرا onInit بهترین جا برای رجیستر کردن event های کنترل های سروری هست؟
در خیلی از سورس ها دیدم که رجیستر کردن رویداد ها رو در خلال این رویداد انجام میدن.

milade
دوشنبه 29 شهریور 1389, 17:38 عصر
چرا كه اولين مرحله دسترسي به داده ها،رويدادها و ... هست در طول عمر صفحه ..
البته رويدادهايي قبل از اون هم هستند اما دسترسي كمتري دارند و عملاً غير قابل استفاده برا اين كارها .
اين رويداد از رويدادهاي Start هستش

amirjalili
دوشنبه 29 شهریور 1389, 19:21 عصر
چرا onInit بهترین جا برای رجیستر کردن event های کنترل های سروری هست در صورتی که در صورتی که در خود msdn میگه کنترل ها رویداد هاشون رو در مرحله renderin رجیستر میکنن. مرحله initialize که متد oninit هم در اون مرحله اتفاق میفته قبل از مرحله rendering به لحاظ چرخه حیات صفحه اتفاق میافته و در این مرحله طبق این گفته که " کنترل ها رویداد هاشون رو در مرحله renderin رجیستر میکنن " ما نباید دسترسی به رویداد ها داشته باشیم چه برسه که بخواهیم اون رو register کنیم. شاید من چیزی رو اشتباه متوجه شدم ؟

msdn:

A control registers its events during rendering and then validates the events during postback or callback handling

اینم لینک lifeCycle
http://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events

احتمالا یه جایی من دارم اشتباه فکر میکنم.
لطفا کمکم کنید تا مشکلم حل بشه.
ممنون

Alireza_Salehi
دوشنبه 29 شهریور 1389, 23:03 عصر
چرا onInit بهترین جا برای رجیستر کردن event های کنترل های سروری هست؟
در خیلی از سورس ها دیدم که رجیستر کردن رویداد ها رو در خلال این رویداد انجام میدن.
طراحان ASP.NET تصمیم گرفته اند چرخه حیات یک صفحه چه مراحلی را طی کند و در مرحله چه اتفاقاتی رخ دهد. بر حسب ویژگی های هر مرحله و اتفاقاتی که در آن می افتد هر مرحله برای کار خاصی مناسب است.

OnInit هم برای رجیستر کردن رویدادها جای مناسبی است. چرا ندارد به خاطر ساختار ASp.NET است. این رویداد چون بعد از آماده شدن همه کنترل های صفحه اجرا میشه بهترین جا برای رجیستر کدن رویدادهاست.
اینجا را ببینید:http://msdn.microsoft.com/en-us/library/ms178472.aspx
کاملا واضحه هر رویدادی به چه دردی میخوره.

amirjalili
سه شنبه 30 شهریور 1389, 09:31 صبح
با تشکر.
سوال من هم همینه.
من نمیگم چرا فلان جا برای رجیستر کردن رویداد مناسب هست یا نیست. سوال من اینه که با توجه به جمله زیر که در خود msdn گفته شده :

A control registers its events during rendering and then validates the events during postback or callback handling

که معنیش همینه که کنترل ها رویداد های خود را در چرخه Rendering رجیستر میکنن. خوب اگه اینطوره این جمله یعنی کنترل ها رویداد های خودشون رو در جایی به جز چرخه Initialization که متد onInit رو در خودش داره رجیستر میکنن. این دو به نظرم متناقضه. یعنی به ما میگن بهترین جا برای رجیستر کردن رویداد در onInit هست (یعنی چرخه Initialization) در حالی که خودشون میگن کنترل های صفحه رویداد خودشون رو در مرحله Rendering ثبت میکنن.
تناقض این دو جمله چی میشه پس؟

milade
سه شنبه 30 شهریور 1389, 10:37 صبح
تناقض این دو جمله چی میشه پس؟

If the current request is a postback, the postback data has not yet been loaded and control property values have not been restored to the values from view state.
عدم دسترسي به View State , مقادير ..