اگر تا حالا سعی کرده باشید با ASP.NET AJAX (راه حل مایکروسافت برای آژاکسی کردن ASP.NET) کار کرده باشید، در برخورد با کنترل UpdatePanel اقلاً برای یک بار هم که شده با خود فکر کردهاید کار با آن خیلی ساده است. اما این فقط ظاهر ماجراست چون آژاکسی کردن با UpdatePanel مشکلات خاص خود را داشته و نیاز به تکنیکهای خاصی برای حل مشکلات آن هست. در ادامه به مرور چند تا از این مشکلات یا تکنیکها که عمدتاً در بخش ۷-۳ و ۷-۴ فصل ۷ کتاب ASP.NET Ajax in Action آمده است میپردازیم:
۱- تزریق کدهای جاوا اسکریپت که قبلا از طریق Page.ClientScript انجام شد حالا باید از طریق متودهای ScriptManager مثل ScriptManager.RegisterStartupScript انجام شود.
۲- همراه با کنترل UpdatePanel دیگر نمیتوان از Server.Transfer و Response.Write استفاده کرد. در مورد Server.Transfer باید event کنترل مربوطه، یعنی آن کنترلی که Server.Transfer در کد event آن صدا میشود را به عنوان PostBackTrigger کنترل UpdatePanel معرفی کنید. در مورد Response.Write هم اگر صرفاً استفادههای دیباگ دارید، یعنی از آن در جاهای مختلف برنامه برای نمایش یک پیغام ساده در صفحه استفاده کردهاید بهتر است از معادل جاوا اسکریپتی آن یعنی Sys.Debug.trace به همراه ابزارهایی مثل FireBug استفاده کنید.
۳- تا آنجا که میشود UpdatePanel کد کمتری را در بر گیرد. هر چقدر که کدهای محصور شده در ContentTemplate آن کمتر باشد Performance بهتری به دست میآید.
۴- UpdatePanel یک property دارد به اسم UpdaetMode. با این که حالت پیش فرض این property برابر Always است سعی کنید آن را همیشه در حالت Conditional نگه دارید مگر آن که مجبور شوید از حالت Always استفاده کنید. این property به UpdatePanel میگوید چه وقتهایی Update شود و چه وقتهایی نشود. این تنظیم صرفاً بر روی Performance تاثیر دارد.
۵- قطع ارتباط کنترلهای سنگینی مثل GridView از parentشان به وسیله کد جاوا اسکریپت control.parentNode.removeNode(gv). این قطع ارتباط بایستی در pageLoading مربوط به PageRequestManager انجام شود.
۶- وقتی که یک صفحه با UpdatePanel آژاکسی شده است به هنگام کار با آن تا نتیجه یک PostBack آسنکرون از سرور بر نگشته است کاری نکنید که صفحه برای بار دوم و سوم و… PostBack بخورد. چون ASP.NET AJAX نمیتواند چند PostBack آسنکرون همزمان را به درستی مدیریت کرده و ممکن است دچار گیجی شود.
۷- بعضی کنترلها هستند که کلاً با UpdatePanel مشکل دارند، برای رفع مشکل این طور کنترلها باید منتظر نسخههای بعدی dot net framework باشید. FileUpload نمونهای از کنترلهایی بود که در framework 2.0 مشکل داشت و احتمالاً تا حالا (زمان انتشار نسخهی بتا ۲ ویژوال استودیو ۲۰۱۰) مشکلش حل شده باشد.
منبع: فصل ۷ کتاب ASP.NET Ajax in Action
مطالعه بیشتر:
۱- آشنایی با کتابخانه Microsoft Ajax Library
۲- جاوا اسکریپتی قویتر با Microsoft Ajax Library
۳- فراخوانی Web Service از Client Side
دیدگاهها
7- در نگارشهاي جديد Ajax Control Toolkit ، كنترل AsyncFileUpload هم اضافه شده است.
http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx
سلام اقای محبی
در مورد 2 من به یه مشکل برخوردم اون هم این بود که خروجی یک گرید ویو رو میخواستم بصورت فایل اکسل برای کاربر اکسپورت کنم و متاسفانه نشد.
شما چه راه حلی برای این مورد دارید؟
ممنون
برای خروجی گرفتن به صورت اکسل از روش یا کامپوننت خاصی استفاده میکنید؟ ممکن است آن کامپوننت مثل خود کنترل FileUpload ناسازگاری داشته باشد. یا شاید هم با یک تریگر از نوع PostBack اجباری مشکلش حل شود.
سلام
خیر از ابزار خاصی استفاده نمیکنم: کاری که میکنم خلاصه شدش اینه:
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.doc");
Response.Charset = "";
Response.ContentType = "application/vnd.word";
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView1.RenderControl(htw);
Response.Write(sb.ToString());
Response.End();
ببخشید اینحا کدش درست مثل اینکه نمیفته
اما اروری که میگیری دقیقا از Response.Write هست.
دکمه اکسپورت هم داخل آپدیت پنل هست.
ممنون میشم راهنماییم کنید
فهمیدم! استفاده از Response.Write در UpdatePanel ممنوع است. باید از روش دیگری برای export به اکسل استفاده کنید.
جناب محبی یعنی هیچ کاری نمیشه کرد؟
تا آنجا که من میدانم UpdatePanel اجازه استفاده از Response.Write را نمیدهد. اگر راهی پیدا کردی به ما هم بگو. چون ما هم در آینده دقیقاً به همین مشکل بر خواهیم خورد. برای پیدا کردن جواب خوب است به StackOverflow.com هم سری بزنی.
در کل با asp.net ajax کاملا مخالفم.
با توجه به یک web App که باهاش نوشتم و در در آخر هرچند همه چیز تقریبا درست کار می کرد اما کاملا پشیمون شدم.
محدودیت ها و مشکلاتی که ajax library در Asp.net داره، کاملا اعصاب خوردکنه.
به تازگی با استفاده از JQuery سیستم مدیریت محتوای کاملا ajaxی نوشتم که بسیار ازش راضیم و با هیچ محدودیت و مشکل خاصی هم مواجه نشدم.
در کل دوستان پیشنهاد اکید دارم به طرف library مایکروسافت برای Ajax نرید، محدودیت های بسیار و نحوه کار بسیار اولیه ای داره و مخصوصا برای برنامه های بزرگ به هیچ عنوان خوب نیست.
@Ali:
اگر ممکن است برای محدودیت ها و مشکلاتی که میگویید چند تا مثال عملی بیاورید. این کار کمک خوبی به روشن شدن بحث میکند.
سلام خسته نباشید
من از یه دیتا پیکر (jalaliJsCalendar) داخل update panel استفاده کردم و بعد از اینکه یه بار اون تیکه رفرش میشه دیتا پیکرم دیگه کار نمیکنه. لطفا اگه می دونین راهنمایی کنین