اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
سؤال مربوط به حالت نخ نمای Page.IsPostBack نیست. مربوط به حالتی است که دقیقا در اولین بار مشاهدهی عادی یک صفحه، Page_Load دوبار یا بیشتر (!) اجرا میشود.
الف) برنامهی ASP.Net 1.x خود را به نگارشهای 2+ ارتقاء دادهاید.
در این حالت هر چند VS.Net پیغام تبدیل با موفقیت یک پروژهی قدیمی را به شما ارائه خواهد داد اما یک سری موارد را پس از تبدیل، باید اصلاح کرد.
پروژههای قدیمی ASP.Net در روال InitializeComponent خود سطر زیر را همانند یک پروژه WinForm و امثال آن برای معرفی روال رخداد گردان Page_Load دارند.
this.Load += new System.EventHandler(this.Page_Load);
اما در پروژههای ASP.Net 2.0 به بعد دیگر از این روال خبری نیست. پس در این پروژهها کامپایلر چگونه متوجه خواهد شد که Page_Load واقعا یک روال رخ داد گردان است و نه یک روال معمولی؟ در پروژههای جدید VS.Net ، خاصیت AutoEventWireup صفحه به true تنظیم شده و دیگر نیازی به معرفی صریح روالهای رخ داد گردانی مانند Page_Load و یا Page_Init نبوده و تشخیص آنها به صورت خودکار انجام میشود.
<% @Page AutoEventWireup="true" %>
برای حل این مشکل و سازگاری بهتر با نگارشهای جدیدتر، سطر تعریف دستی روال رخ داد گردان متد Page_Load را حذف کنید.
لازم به ذکر است که این سیم کشی خودکار تنها برای متدهای زیر انجام خواهد شد و نسبت به حذف سایر موارد موجود اقدام نکنید!
Page_PreInit
Page_Init
Page_InitComplete
Page_PreLoad
Page_Load
Page_LoadComplete
Page_DataBind
Page_SaveStateComplete
Page_PreRender
Page_PreRenderComplete
Page_Unload
Page_Error
Page_AbortTransaction
Page_CommitTransaction
ب) وجود هر نوع دکمهی تصویری یا کلا تصویری با ویژگی src مقدار دهی نشده در صفحه
مرورگر IE با این مساله مشکلی ندارد. اما فایرفاکسهای جدید اگر به src مقدار دهی نشدهی تصویری برخورد کنند دقیقا آدرس جاری صفحه را بجای مقدار src قرار داده و مجددا صفحه را درخواست میکنند (و البته این مورد ارتباط مستقیمی به ASP.Net یا PHP و امثال آن ندارد و یک مسالهی عمومی است). این مورد سبب خواهد شد که Page_Load صفحه، نه فقط دوبار بلکه به تعداد بار src خالی تصاویری که در صفحه وجود دارند، بر اساس درخواستهای مجدد فایرفاکس از سرور اجرا شود. (مرورگر IE بجای فراخوانی آدرس صفحه جاری، یک null/ را به انتهای آدرس جاری اضافه کرده و آنرا فراخوانی میکند. بنابراین سبب اجرای مجدد هیچ روالی نخواهد شد.)
مآخذ:
Inside AutoEventWireup
How Firefox Handles Empty SRC tags