PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مقالات طبقه بندي شده asp.net از نو آموز تا حرفه اي



TAHA
10-28-2009, 10:50 PM
سلام به دوستان گلم
این تاپیک را باز کردم برای کسانی که رشته آنها کامپیوتره و فکر میکنم که این مطالب برایشان مفید باشه..

امیدوارم که تاپیک مفیدی باشه..
خوشحال میشم اگر هم که دوستان گلم در این تاپیک کمکم کنند

البته این موضوع تحقیق خودمم هست...

TAHA
10-28-2009, 10:51 PM
آموزش asp.net (مقدمه)


واقعا چرا asp.net ؟مايكروسافت خودش اين دلايل رو مياره ( نكته با توجه به اينكه من هرگز فكر نميكردم اين ترجمه

رو يه روزي بخوام منتشرش كنم بنا براين نثرش خيلي شلخته است كه بايد به بزرگواري خودتون ببخشيد.)

چرا asp.net ؟اين دلايليه كه مايكروسافت مياره.

چرا asp.net
1:برنامه نويسي آسان
asp.net به طور شگفت انگيزي برنامه نويسي وب را آسان كرده است.كنترلهاي سرور asp.net ميتونند به شما كمك كنند
كه با كمترين ميزان كد برنامه هاي قوي بسازيد .شما با اين كنترلها ميتونيد به آساني هرچه تمام تر به ديتا بيس ها متصل بشيد ,ميتوانيد وروي هاي كاربرها رو اعتبار سنجي كنيد ,فايلهاي كاربر رو به روي سرور آپلود كنيد .اما بهتر از همه!!ديگه نيازي نيست نگران مرورگرها باشيد.كنترلهاي سرور asp.net بر روي تمامي مرورگرها اجرا ميشوند!!
عدم وابستيگ به زبان خاص
asp.net كاملا آماده پذيرفتن برنامه نويسان زبانهاي ديگر است. شما در asp.net به يك زبان خاص متكي نيستيد .بر عكس asp كلاسيك كه شما به زبانهاي اسكريپتي jscript و vbScript وابسته بوديد اما شما در asp.net هم اكنون قادر به برنامه نويسي با 25 زبان برنامه نويسي هستيد.asp.net دست شما را براي انتخاب زبان برنامه نويسي مورد علاقه تان كاملا باز گذاشته است!!
ابزارهاي عالي
شما ميتوانيد حتي با تكست اديتور هاي ساده مثل notPad هم حداكثر استفاده را از asp.net ببريد .اما مي توانيد با استفاده از ويژوال استوديو به همان راحتي كه در محيط ويژوال بيسيك برنامه مينوشتيد!!در محيط وب نيز برنامه بنويسيد.ميتونيد در محيط ويژوال استوديو از راحتي كار لذت ببريد.كنترلها ار درگ اند دراپ كنيد!به راحتي هر چه تمام تر براي آنها كد بنويسيد.در اين راه
ويژوال استوديو به عنوان يك دوست خوب همواره همراه شما خواهد بود.ابزارهاي جانبي ويژوال استوديو نيز كارهايي همچون تست و دیباگ و... را برای شما انجام میدهند.
كلاسهاي از پيش ساخته شده
كلاسهاي از پيش نوشته شده asp.net همواره در طول برنامه نويسي در كنار شما خواهند بود.و كارهاي پيچيده را به راحتي هر چه تمام تر براي شما انجام ميدهند.4500 كلاس فريم ورك دات نت تقريبا هر كاري را با كمترين مقدار كد براي شما انجام خواهند داد!!كارهايي مثل "كار با ديتا بيس" , "كار با XML " , "كار با تصاوير" و .....
پرفورمنس و قابليت توسعه!
اجراي كامپايل شده: بايد به اين كته توجه داشت كه asp.net بسيار سريع تر از asp كلاسيك و هر زبان مترجمي ديگر است
نكته جالب اينجاست كه شما به هيچ وجه كاري با اين كامپايل نخواهيد داشت و اصولا متوجه آن نخواهيد شد!در ضمن در صورت كمترين تقييري در فايل سورس و كد كامپايل شده براي پاسخگويي به ريكوئست ها آماده خواهد بود.كد كامپايل شده همواره به روز خواهد بود.اين الگوريتم باعث شده asp.net سه تا 4 برابر سريع تر از asp كلاسيك باشد.
پس به خاطر داشته باشيد كه كدها در asp.net در انتها به native code كامپايل ميشوند و اين باعث افزايش كارايي و سرعت asp.net ميشود!
خروجي كش شده:
سيستم كش asp.net به طور شگفت آوري كارايي نرم افزار شما را افزايش ميدهد . هنگامي كه سيستم كش در يك صفحه فعال باشد . asp.net فقط و تنها و فقط يك بار كد را اجرا ميكند و صفحه را در حافظه خود نگه ميدارد بارهاي ديگر فقط نتيجه اين اجرا را براي درخواست كننده ميفرستد . اين عمل باعث صرفه جويي در پراسس سرور ميشود . و از اجراي چند باره يك كد جلو گيري ميكند.كش شدن خروجي مخصوصا در صفحات متصل به دستا بيس باعث افزايش كارايي و كاهش تراكنش با ديتا بيس ميشود.
ارائه نتيجه بهتر از رقيب (J2EE)
در مقايسه نتايج دو تكنولوژي J2EE , asp.net نتايج بهتري از asp.net به دست مي آيد.
يك برنامه asp.net يك چهارم J2EE به كد نويسي احتياج دارد!!و در انتها 28 برابر سريع تر از J2EE اجرا ميشود!همچنين به 7 برابر بيشتر از J2EE به كاربرها پاسخ ميدهد!تنها با يك ششم استفاده بيشتر از CPU !!
براي دريافت كد و برنامه petshop به آدرس زير مراجعه كنيد و خودتان نتايج را بدست بياوريد و مقايسه كنيد!
http://msdn.microsoft.com/net/compare/default.asp
قابل اعتماد بودن
asp.net سعي كرده است كه برنامه همواره در دسترس يوزرهای آن باشد.يعني مشكلات تا آنجا که ممکن است باعث از كار افتادن برنامه و قطع سرويس دهي آن نشود .
asp.net به طور اوماتيك ارورها را تشخيص و آنها را بر طرف ميكند مشكلاتي از قبيل Memory Leak شدن يا DeadLock شدن يا كرش كردن برنامه.
به عنوان مثال شما برنامه اي نوشته ايد كه داراي مشكل Memory Leak (به هدر رفتن حافظه) است.
بعد از يك هفته اين اشتباه باعث ميشود كه در صد بالايي از مموري سرور اشغال شود. در این وظعیت asp.net به طور اتوماتيك
بار ديگر برنامه را اجرا ميكند و برنامه مشكل دار را از استفاده خارج ميكنداز بين ميبرد ومموري را آزاد ميسازد.تمام اين فرايندها كاملا اتوماتيك و بدون دخالت هيچ فردي اتفاق ميفتد.

انتشار ساده

1: asp.net انتشار و نصب برنامه را بسيار ساده كرده است.شما ميتوانيد يك برنامه چند لايه را به راحتي انتشار يك سايت html بر روي سرور كپي كنيد!بدون نياز به نصب اجراي regsvr32 براي رجيستر كردن كامپوننتها.براي تنظيم برنامه هاي asp.net تنها اديت كردن فايل web.config كافيست.

2:يكي از مسايلي كه در asp كلاسيك برنامه نويس را دچار دردسر ميكرد مسئله كامپوننتاهاي كام بود.در حقيقت بعد از ارتقا كامپوننتها برنامه نويس بايد سرويس را راه اندازي دوباره ميكرد و مسلما براي دقايقي آن سرويس از دسترس خارج ميسد اما در asp.net اين مشكل حل شده است و براي ازتقاع شي كامپوننت فقط نياز هست كه كمپوننت جديد جايگزين كامپوننت قديمي بشود.و بعد از آن asp.net بدون كوچكترني دردسري آن كامپوننت را خواهد شناخت!

3:يكي از ويژگي هاي asp.net اين است كه شما مجبور نيستسد برنامه هاي سابق خود را كنار بگذاريد!!بلكه ميتوانيد كماكان به طور پهلو به پهلو از 2 تكنولوژي جديد و قديم استفاده كنيد.همچنين ميتوانيد از اشيا’ كام كلاسيك خود همچنان استفاده كنيد .دليل اين موضوع هم اين است كه موتور asp كلاسيك كماكان در كنار موتور asp.net در IIS6 حضور دارد.
سرويسهاي ويژه
XML web serviseسرويسهاي XML شما را قادر ميسازد متدهاي خود را در اختيار ديگر برنامه هاي وب بگذاريد.در سرويسهاي وب شما حتي نبايد نگران سيستم عامل سرويس گيرنده باشيد!شما ميتوانيد به سادگي و با چند خط كد سرويس وبي بنويسيد و در اختيار ديگران قرار
بدهيد و آنها نيز ميتوانند به آساني متدهاي اين سرويسها را كال كنند!
هر كلاسي ميتواد به يك سرويس وب تبديل شود.تنها نيازي كه برنامه سرويس گيرنده براي در دسترس داشتن اين كلاسها لازم دارد پروتوكل SOAP هست!پس از آن به راحتي هرچه تمام تر و بدون نياز به داشتن اطلاعاطي در باره شبكه و XML ويا هر چيز ديگر.
برنامه نويسي موبايل
كنترلهاي موبايل به شما اين امكان را ميدهد كه به سادگي براي موبايلها PDA ها و ساير انواع موبايلها(غريب به 80 نوع) برنامه بنويسيد.شما برنامه خود را مينويسيد و سپس كنترلهاي موبايل asp.net آن را به فرمت قابل در يافت موبايلها از قبيل WAP/WML, HTML, يا iMode تبديل خواهد كرد.

TAHA
10-28-2009, 10:51 PM
اين مقاله از سايت dev.ir استخراج شده است ، متاسفانه اين سايت از گردونه سايتهاي فارسي خارج شده است لذا براي حفظ مقاله آن را در اينجا باز آوري ميكنيم .

-----------------------------------------------------------------
چرا به دات نت احتياج داريم؟
به طور معمول نسل های جديد زبان های برنامه نويسی به اين دليل متولد می شوند که زبان های قديمی تر دارای امکانات محدود بودند و يا قدرت استفاده از تکنولوژی های فعلی را به صورت مطلوب و ساده ندارند.
مهمترين نيازی که به عنوان آخرين تکنولوژی وجود دارد، برنامه نويسی در محيط اينترنت است. اينترنت در مدت تقريبا ۸ سال جای خود را به عنوان يکی از مهمترين وسايل ارتباطی برای کارهای روزمره و تجارت باز کرده است. سيستم های برنامه نويسی قديمی تر امکان برنامه نويسی برای اينترنت را فراهم کرده بودند اما هر کدام دارای اشکالات بزرگی هستند، برای مثال تکنولوژی COM اولين بار در ويندوز به کار گرفته شد. در سال 1970 نيز سيستم هايی برای Unix نوشته شده بودند، جاوا نيز در اصل برای ابزارهای الکترونيکی بود و نه برای اينترنت.
سپس برای اولين بار يک سيستم جامع برای برنامه نويسی تحت اينترنت ايجاد شد. اين سيستم -NET. از مراحل سطح پايين که به زبان ماشين می باشد تا بالاترين سطح که برنامه نويسی ويژوال آن می باشد برای استفاده در اينترنت طراحی شده است. البتهNET. فقط برای اينترنت نيست و با استفاده از آن می توان برنامه های کامل تحت Client نيز ايجاد کرد، اما بزرگترين مزيت آن دربرابر سيستم های ديگر امکانات اينترنت آن است.
برای اينکه مزايای استفاده ازNET. را بهتر متوجه بشويم بهتر است در ابتدا معايب سيستم های پيشين را ذکر کنيم. شرکت مايکروسافت تا قبل از سال 1995 به برنامه نويسی در محيط های Client و Server می پرداخت، اما از آن سال به بعد توجه بيشتری به مساله برنامه نويسی در اينترنت کرد. مايکروسافت COM و +COM را ايجاد کرد و آنها را در ويژوال استوديوی 6 به کار گرفت. در سال 1999 حدود ۵۰ در صد از بزرگترين سايتهای تجارت الکترونيکی از محصولات مايکروسافت استفاده می کردند. اما هنوز هم مشکلات بزرگی در سيستم های مايکروسافت وجود داشت که يکی از آنها دشواری نوشتن برنامه در اينترنت با محصولات مايکروسافت بود. شرکت مايکروسافت برای راحتی کار برنامه نويس ها ASP يا Active Server Page را ايجاد کرد. با اينکه اين يک قدم بزرگ بود و کارها را بسيار ساده کرد ولی هنوز از برنامه نويسی شی گرا پشتيبانی نمی کرد. همچنين در ويژوال استوديوی 6 قسمتی برای Internet Application ايجاد شده بود و در آنها امکان ساختن Web Class وجود داشت ولی هيچ وقت به عنوان يک ابزار کار آمد برای برنامه نويسی وب درنظر گرفته نشد.
مدل برنامه نويسی DNA
مايکروسافت يک مدل برنامه نويسی به نام Distributed interNet Application دارد که بر پايه برنامه نويسی n-tier و COM بنا نهاده شده است. مدل DNA از سه بخش اساسی تشکيل شده است.
بخش اول به نام Presentation tire معروف است. در اين بخش رابط تصويری کاربر وجود دارد و خود نيز به دو نوع Internet Browser و Win 32 GUI تقسيم می شود که هر کدام مشکلات خاص خود را دارند. در مدلی که از Win32 GUI يا همان نرم افزارهای معمولی استفاده می شود دو مشکل بزرگ وجود دارد ؛ دشواری بروز رسانی نرم افزار و ديگری DLL Hell که در ادامه توضيح داده خواهد شد. در نوع دوم مشکلاتی از قبيل نبود امکانات برنامه نويسی کافی در محيط مرورگر، نبود رابط قوی با کاربر، نبودن مرورگر های يکسان و... وجود دارد. همچنين هميشه يک اتصال به اينترنت يا اينترانت لازم است. در اين نوع از برنامه نويسی می توان از Java Applet ها يا ActiveX استفاده کرد ولی مرورگر بايد امکان استفاده از آن را داشته باشد، مخصوصا ً هنگام استفاده از ActiveX که بايد فقط از IE استفاده کرد.
بخش دوم که Middle tier نام دارد، مکانی است که اطلاعات و قوانين تجاری در آن وجود دارد. منظور از قوانين ، متد ها و اجزائی هستند که اعمال کاربران را کنترل می کنند. مهمترين و آسان ترين زبان برای نوشتن اين اجزا از DNA ويژوال بيسيک است. برنامه نويسی که بخواهد در اين رده برنامه بنويسد بايد آشنايی کاملی با COM و پروتکل های رايج داشته، همچنين بايد مهارت کافی در استفاده از ADO و ADSI داشته باشد. مشخص است که يک اشتباه در اين لايه باعث بروز خطا و نقص در کل سيستم می شود.
بخش سوم يا Data tier مکانی است که اطلاعات سازمان در آن ذخيره می شود. معمولا ً در اين قسمت از بانکهای پيشرفته رابطه ای مانند SQL Server و Oracle استفاده می کنند.
محدوديت های COM
همانطور که ديديد مهمترين قسمت در DNA همان COM است که در جای جای آن استفاده می شود. در اينجا برخی معايب COM ذکر می شود : ( در ابتدای متن ذکر شد که برای درک نياز بهNET. بايد ابتدا معايب سيستم های قديمی را بشناسيم )
DLL Hell: اگر کوچکترين تغييری در يک COM ايجاد شود، ديگر برنامه هايی که از ورژن قبلی استفاده می کردند قادر به فعال ساختن نسخه جديد نيستند. هنگامی که در ويندوز، يک COM نصب شود برايش در رجيستری يک GUID ثبت می شود که اطلاعات آن COM را در خود ذخيره می کند. اگر يک برنامه از نسخه اول يک COM استفاده کند و بعد از مدتی شما تغييراتی در نسخه اول بدهيد و بخواهيد آن را دوباره در سيستم نصب کنيد ويندوز به شما پيغام خطا می دهد چون ورژن آن تکراری است، اگر هم آن را به ورژن دوم ارتقا دهيد نرم افزار قبلی هنوز به دنبال نسخه اول می گردد. اين امر باعث می شود که شما مجبور شويد يکبار ديگر کل برنامه را کامپايل کرده و در کامپيوترتان نصب کنيد.
کمبود در وراثت: در نسخه های COM که در حال حاضرهستند چيزی به نام وراثتی که در ++C وجود دارد نمی باشد، بلکه وراثت تنها در واسط يک COM می باشد، استفاده از آن هم چندان کمکی به برنامه نويسی نمی کند.
برخی محدوديت های برنامه نويسی اينترنتی در مدل DNA
۱- وجود دو محيط برنامه نويسی برای اينترنت و Client
نقصان در نوشتن برنامه هايی با رابط گرافيکی خوب که در اينترنت کار می کردند کاملا ً مشهود است، نمونه بارز آن اختلاف در برنامه نويسی در ويژوال بيسيک و ASP است. ويژوال بيسيک با رابط گرافيکی کاملا ً سطح بالا و ASP تقريبا ً رابط گرافيکی ندارد. همين امر باعث می شد که يک برنامه نويس مجبور باشد طيف وسيعی از تکنيک ها و زبان ها را فرابگيرد تا بتواند برنامه ساده ای در اينترنت بنويسد.
۲- نبودن حالت های ذخيره اطلاعات رابط گرافيکی در صفحه های اينترنتی
نمونه اين حالت زمانی است که در يک textbox متنی وجود داشته باشد. در برنامه های Win32 GUI متن داخل textbox تا زمانی که کاربر يا برنامه آن را تغيير نداده بر جای خود وجود دارد. اما در محيط اينترنت و نوع ASP با هر بار refresh کردن صفحه کل اطلاعات ازبين می رود. البته اين مشکل با استفاده از شئ های Request و Response تقريبا ً قابل حل است ولی احتياج به برنامه نويسی برای هر تکه از صفحه ASP دارد.
۳- نداشتن Event Handler در محيط برنامه نويسی اينترنت
يکی از مهمترين ابزاری که در برنامه نويسی Win32 GUI وجود دارد استفاده از Event ها است. با تکنولوژی که در حال حاضر وجود دارد تنها راه رسيدن به اين مهم استفاده از ActiveX است که به علت مسايل امنيتی در بيش از ۹۵ در صد مواقع توسط کاربر استفاده از آن رد می شود.
معايب استفاده از API
API ها توابعی هستند که از ويندوز نسخه 1 تا امروز در برنامه نويسی کاربرد داشته و دارند. مهمترين کاری که اين توابع انجام می دهند انجام کارهای سخت و سطح پايين سيستمی است که احتياج به برنامه نويسی زيادی دارند و يا حتی امکان ايجاد آن با زبان هايی مثل ويژوال بيسيک نيست. اما هر API از هر نسخه ويندوز تا نسخه ديگر آن می تواند دچار تغييرات بشود. برای مثال برنامه ای که در ويندوز 98 نوشته شده باشد می تواند در ويندوز 95 اجرا نشود. همچنين هم اکنون ابزارهای جديدی به بازار آمده است که برای آنها نيز می توان برنامه نويسی کرد، مانند تلفن های سيار، کيوسک تلفن، دستگاه های کامپيوتری جيبی و غيره. در اين نوع دستگاه ها ديگر ويندوز به مفهومی که در حال حاضر وجود دارد قابل اجرا نيست و در نتيجه API هم وجود ندارد. لازم به ذکر است که ويندوز CE برای دستگاه های مذکور می باشد ولی قابليت های آن با ويندوزهای ديگر تفاوت زيادی دارد.

TAHA
10-28-2009, 10:52 PM
اين مطلب از سايت Iranasp.net استخراج شده است ، متاسفانه اين سايت از گردونه سايتهاي ايراني خارج شده است ، لذا براي حفظ مطلب آن را در اينجا مي آوريم :
-------------------------------------------------------------------------------------------
NET نسل بعدی Active Server Pages يا ASP است که توسط شرکت ميکروسافت ارائه شده است. اين محصول توسط ميکروسافت بعنوان شاخص اصلی فناوری در ساخت سايتهای وب در نظر گرفته شده است. با استفاده از ASP.NET می توان هم اينترانت کوچک يک شرکت را ساخت و هم يک سايت وب تجاری خيلی بزرگ را طراحی و پياده سازی نمود. مهمترين نکاتی که در طراحی اين محصول در نظر گرفته شده است راحتی استفاده و بالا بودن کارائی و قابليت آن می باشد. در زير برخی ويژگيهای ASP.NET را بررسی می کنيم.
• صفحات ASP.NET کامپايل می شوند.
هنگامی که يک صفحه ASP.NET برای اولين بارتوسط يک مراجعه کننده به سايت فراخوانی می شود، آن صفحه ابتدا کامپايل شده و بر روی سرور نگهداشته می شود و در فراخوانی های بعدی از آن استفاده می شود. اين بدين معنی است که صفحات ASP.NET خيلی سريع اجرا می شوند.
• صفحات ASP.NET با ابزارهای روی سرور ساخته می شوند.
با ابزارهای موجود در ASP.NET می توان صفحات پيچيده وب را براحتی طراحی نمود. بعنوان مثال با استفاده از ابزار DataGrid می توان به آسانی داده های موجود در يک بانک اطلاعاتی را تحت وب نمايش داد.
• مجموعهASP.NET عضوی از بدنه NET. است.
بدنه NET. دارای بيش از ۴۵۰۰ کلاس آماده جهت استفاده در ASP.NET است. اين کلاس ها تقريبا هر نيازی را در برنامه نويسی برآورده می کنند. بعنوان مثال از اين کلاس ها می توان جهت توليد تصاوير بر حسب تقاضا، به رمز درآوردن يک فايل و يا ارسال يک نامه استفاده کرد.
مقايسه ASP.NET و ASP کلاسيک
ASP.NET نسل بعدی ASP يا ASP کلاسيک است. اما اين يک پيشرفت تکاملی است بطوريکه اين دو فناوری تقريبا از يکديگر متفاوتند. صفحات ASP با زبان های دستورالعمل نويسی مانند VBScript يا JScript ايجاد می شوند اما در ASP.NET ما يک فرايند کامل برنامه نويسی با زبانهای Visual Basic يا #C (سي-شارپ تلفظ شود) داريم. همچنين در ASP کلاسيک تنها پنج کلاس استاندارد (Request, Response, Application Session, Server) وجود دارد حال آنکه در ASP.NET می توان از بيش از ۴۵۰۰ کلاس استاندارد موجود در بدنه NET. بهره جست.همچنين عليرغم قدرت و امکانات زياد و متعدد ASP.NET، استفاده از آن در مقايسه با ASP کلاسيک بسيار آسانتر است. بعنوان مثال با استفاده از چند ابزار در يک صفحه ASP.NET می توان يک صفحه بسيار پيچيده HTML بدست آورد که ساخت آن در ASP کلاسيک ممکن است نياز به چند روز کار داشته باشد.
زبانهای برنامه نويسی در ASP.NET
شما در ASP.NET می توانيد از هر زبان برنامه نويسی که با بدنه NET. سازگار باشد استفاده کنيد. اين زبانها عبارتند از Visual Basic.NET و #C و JScript.NET . اين بدين معنی است که شما جهت نوشتن برنامه در ASP.NET نياز به فراگيری زبان جديدی نداريد و اگر يکی از زبانهای ويژوال بيسيک يا ++C يا جاوا را می دانيد هم اکنون می توانيد در ASP.NET برنامه بنويسيد.از طرف ديگر تعدادی زبانهای ديگر توسط بعضی از شرکتهای فعال در اين زمينه به مجموعه زبانهای استاندارد ASP.NET افزوده شده است. بعنوان مثال اگر مايل باشيد حتی می توانيد از PERL و COBOL هم در ASP.NET استفاده کنيد.
ابزارهای ASP.NET
سالهاست که برنامه نويسان ويژوال بيسيک جهت ساخت فرم های خود از ابزارهای ويژوال بيسيک مانند TextBox و ListBox استفاده کرده اند. در ASP.NET هم شما می توانيد از ابزارهای فراوان موجود در آن برای ساخت فرم ها و صفحات خود استفاده نمائيد. در ASP.NET چهار دسته عمده از ابزارها موجود است:
• ابزارهای اصلی مانند TextBox، RadioButton، ListBox و Button.
• ابزارهای اعتباری برای حصول اطمينان از ورود و تائيد صحت اطلاعات ورودی فرم ها.
• ابزارهای داده ای برای ارتباط با بانک اطلاعاتی و دستکاری داده.
• ابزارهای پيشرفته جهت نمايش عناصر پيچيده در واسط کاربر مانند تقويم و آگهی های تبليغاتي.
با استفاده از Visual Studio.NET شما براحتی می توانيد با چيدن تصويری اين ابزارها بر روی فرم مورد نظر، صفحه دلخواه خود را بسازيد. در صورت تمايل حتی می توانيد در يک ويرايشگر ساده متن مانند Notepad برنامه مورد نظر را نوشته و از اين ابزارها استفاده کنيد.
دريافت ASP.NET
جهت شروع برنامه نويسی در ASP.NET تنها کافی است که مجموعه ASP.NET را بهمراه بدنه NET. از سايت ميکروسافت دريافت کنيد.
دريافت .NET Framework
ASP.NET با سيستم عامل های Windows 2000 (نسخه Server و Professional) و Windows XP کاملا سازگار است.

TAHA
10-28-2009, 10:53 PM
اين مقاله از سايت Iranasp.net استخراج شده است . متاسفانه اين سايت از گردونه سايتهاي فارسي خارج شده است ، لذا براي حفظ مطلب ضمن احترام براي سايت مذكور ، مديريت و كليه مقاله نويس هاي آن سايت اين مقاله در در اينجا مي آوريم .

--------------------------------------------------------------------------------------
Namespace چيست؟
يک نکته مهم که در زمان استفاده از NET Framework. بايد به آن توجه داشت آن است که فضانام (namespace يا نامکده) ها در ساختمان برنامه کاربردی قرار دارند. فضانام يک طرح نامگذاری منطقی برای گروه بندی کلاس های مرتبط است. اين طرح مانع از آن می شود تا کلاس هايی که برای متدها و خصوصيات از يک شناسه يکسان استفاده می کنند تداخل داشته باشند.
مثلا NET Framework. برای گروه بندی تايپ ها به مقوله های منطقی عملکرد، از قبيل چارچوب برنامه کاربردی ASP.NET، از يک طرح نامگذاری سلسله مراتبی استفاده می کند. ابزارهای طراحی از فضانام ها با هدف تسهيل مرور و ارجاع تايپ ها در برنامه بهره برداری می کنند. مثلا فرض کنيد در حال نوشتن کد زير هستيد:


Public Class NewClass
[Procedures and Functions]
End Class

Public Class NewClass
[Procedures and Functions]
End Class


اين کد به خطا منجر می شود چون کامپايلر راهی برای تشخيص کلاس ها از يکديگر ندارد. برای غلبه بر اين مشکل می توان از يک فضانام استفاده کرد که اجازه می دهد دو کلاس همنام در صفحه با هم وجود داشته باشند. قطعه برنامه زير تعريف اين دو کلاس در فضانام های منحصر بفرد را نشان می دهد:



Namespace One
Public Class NewClass
[Procedures and Functions]
End Class
End Namespace

Namespace Two
Public Class NewClass
[Procedures and Functions]
End Class
End Namespace


در اين کد برخوردی بين دو کلاس با نام NewClass وجود ندارد چون هر کدام در يک فضانام جداگانه قرار داده شده است. کلاس اول را می توان با استفاده از ترکيب One.NewClass صدا زد، حال آنکه کلاس دوم را می توان با استفاده از ترکيب Two.NewClass صدا زد.
شما می توانيد در فضانام های خود از يک ساختار سلسله مراتبی استفاده کنيد. قرار دادن اشياء مشابه تحت زيرعنوانها در يک فضانام مشترک تشخيص هدف فضانام را آسانتر می کند، و در عين حال باعث می شود برنامه به مراتب شئ گراتر شود.
برای توضيح فضانام می توان ساختار فايل و دايرکتوری (کشو، فولدر) در يک کامپيوتر را در نظر گرفت. در اين مثال کلاس ها به مثابه فايل ها و فضانام ها مانند دايرکتوری ها هستند. بديهی است همانگونه که می توانيم دايرکتوريهای تو در تو داشته باشيم، فضانام ها هم در حاليکه کلاس ها را در خود جای داده اند می توانند بصورت تو در تو باشند.
فضانام ها در ساخت برنامه های کاربردی ASP.NET نقش مهمی ايفا می کنند. خوشبختانه لازم نيست برای همه اشيايی که می توانند به وسيله صفحات ASP.NET مورد استفاده قرار بگيرند سيستم طبقه بندی فضانام ايجاد کنيد. مايکروسافت اين مساله را برای شما حل کرده است. دو فضانام ريشه، و فضانامهای فرزند آنها را می توان وارد صفحات ASP.NET خود کرد. اولی System ناميده می شود، و دومی Microsoft نام دارد. اين فضانامها با جزئيات بيشتر در ادامه مورد بحث قرار گرفته اند.
فضانام System
فضانام System فضانام اصلی برای ساخت ASP.NET و همه برنامه های کاربردی ديگر مبتنی بر NET Framework. است. هر چيزی که در برنامه کاربردی شما قابل انجام باشد از طريق فضانام System کنترل می شود. به عنوان مثال کنترل آرايه، عمليات رياضی، و تبديل نوع داده ها از طريق فضانام System و فضانامهای فرزند آن اداره می شوند. ۹ فضانام پيش فرض (فضانام System و ۸ فرزند آن) وجود دارند که به صورت خودکار به صفحات ASP.NET اضافه می شوند:
• System
• System.ComponentModel.Design
• System.Data
• System.Drawing
• System.Web.SessionState
• System.Web
• System.Web.UI
• System.Web.UI.WebControls
• System.Web.UI.HTMLControls
هشت فضانام (بجز فضانام System) در زمان ساخت Visual Studio.NET يا VS.NET بطور خودکار به صفحات ASP.NET وارد می شوند. اين فضانام ها در زير به اختصار شرح داده شده اند.
• System.ComponentModel.Design: دربرگيرنده کلاس هايی است که می توان از آنها برای طراحی پشتيبانی سفارشی اجزا و زمان طراحی و دسترسی به سرويس های تامين شده توسط معماری NET Framework. استفاده کرد.

• System.Data: امکان دسترسی به کلاس ها و رابطهايی را فراهم می کند که معماری ADO.NET را برای دسترسی به داده های عمومی تشکيل می دهند.

• System.Drawing: دربرگيرنده کلاس ها و رابطهايی است که عملکرد گرافيکی اوليه را تامين می کنند. فضانام System.Drawing نيز از طريق فضانام System.Drawing.Drawing2D و System.Drawing.Imaging عملکرد پيشرفته تری فراهم می کند.

• System.Web: کلاس ها و رابطهايی تامين می کند که ارتباط مرورگر/سرويس دهنده را امکان پذير می کنند. اين فضانام دربرگيرنده کلاس HTTPRequest (فراهم کننده اطلاعات وسيعی درباره درخواست HTTP جاری)، کلاس HTTPResponse (فراهم آورنده امکان دسترسی به فرآيندها و يوتيليتی های سمت سرويس دهنده) است.

• System.Web.SessionState: فراهم کننده کلاس ها و متدهايی برای مديريت وضعيت جلسات کاری می باشد.

• System.Web.UI: فراهم کننده کلاس ها و رابطهايی برای رابط واسط کاربر برنامه کاربردی ASP.NET است که موجب می شوند برنامه کاربردی با سطوح مختلف صفحه، ارتباط برقرار کند. کلاس اصلی اين فضانام، کلاس Page می باشد که دربرگيرنده همه خصوصيتها، متدها، و سازنده های صفحه است. اشياء اصلی Active Server Page زير خصوصيتهايی در کلاس Page هستند: Application ،Response ،Request ،Server و Session.

• System.Web.UI.HTMLControls: کلاس هايی برای عناصر HTML استاندارد، شامل فرم ها، کنترل های ورودی، آنکور، جداول، قسمتهای متنی، و غيره فراهم می کند. اين کنترلها همانند تگهای عادی HTML هستند با اين تفاوت که داری دو صفت runat="server" و id="controlname" می باشند.

• System.Web.UI.HTMLControls: برای کنترلهای سرويس دهنده ای که شبيه کنترلهای HTML هستند ولی انعطاف پذيری بيشتر و عملکرد پيچيده تری دارند کلاس هايی را تامين می کند.
برخی فضانام های مهم و پرکاربرد ديگر به شرح زير می باشند.
• System.IO: دربرگيرنده رابطها و کلاس هايی است که امکان خواندن و نوشتن همگام و غيرهمگام فايل ها و جريانهای داده را فراهم می کنند.

• System.Data.OleDb: امکان دسترسی به کلاس ها و رابطهای مخصوص دسترسی به يک منبع داده از طريق ADO را فراهم می کند.

• System.Data.SqlClient: امکان دسترسی به کلاس ها و رابطهای مخصوص دسترسی به داده های خاص Microsoft SQL Server از طريق ADO را فراهم می کند.

• System.Web.Security: امکان دسترسی به کلاسها و رابطهای مخصوص امنيت برنامه کاربردی ASP.NET را فراهم می کند. دستيابی به رمزنگاری، مجوزها، و تنظيمات خط مشی برنامه کاربردی در اين فضانام قرار می گيرند.

• System.XML: امکان دسترسی به کلاسها و رابطهای مخصوص پردازش اسناد XML را فراهم می کند.
فضانام Microsoft
علاوه بر فضانام System که در چارچوب NET. يافت می شود، مايکروسافت چند فضانام اضافه کرده است که برای زبان برنامه سازی ای که می خواهيد از آن در برنامه کاربردی خود استفاده کنيد عملکرد لازم را تامين می کنند. ممکن است شما بصورت مستقيم با اين فضانام کاری نداشته باشيد.
• Microsoft.VisualBasic: اين فضانام محتوی CLR يا زمان اجرای Visual Basic.NET است. از اين زمان اجرا با زبان Visual Basic.NET استفاده می شود. اين فضانام همچنين دربرگيرنده کلاس هايی است که از کامپايل و توليد کد با استفاده از زبان ويژوال بيسيک پشتيبانی می کنند.

• Microsoft.CSharp: اين فضای نام دربرگيرنده کلاس هايی است که از کامپايل و توليد کد با استفاده از زبان #C پشتيبانی می کنند.

• Microsoft.JScript: اين فضای نام دربرگيرنده کلاس هايی است که از کامپايل و توليد کد با استفاده از زبان JScript پشتيبانی می کنند.

• Microsoft.Win32: کلاسها و رابطهای مورد نياز برای کار با کليدها و hiveهای رجيستری را تامين می کند.
با وجود آنکه فضانام ها از قبل تامين می شوند، می توانيد برای استفاده از برنامه کاربردی ASP.NET فضانام های خود را ايجاد کنيد. برای هر کلاس ايجاد شده توسط سازنده يک فضانام توليد می شود.

استفاده از فضانام ها در صفحات ASP.NET
دو راه برای افزودن فضانام به برنامه کاربردی ASP.NET وجود دارد. از شبه دستور (Directive) صفحه Import@ برای صفحات ASPX و از کلمه کليدی Imports برای افزودن فضانام به برنامه codebehind مربوطه در ويژوال بيسيک استفاده می شود و برای زبان #C از دستور using استفاده می گردد. قطعه برنامه زير ترکيب نحوی برای افزودن فضانام System.Web.UI.WebControls به صفحه ASP.NET شما است.


<%@ Import namespace = "System.Web.UI.WebControls" % >


همين فضانام را در قسمت codebehind بصورت زير به برنامه اضافه می کنيم.



Imports System.Web.UI.WebControls (vb.net )
using System.Web.UI.WebControls; (C#)
( به تفاوت Import و Imports دقت کنيد )


در صورتيکه می خواهيد چند فضانام را به صفحه ASP.NET خود و يا صفحه codebehind اضافه کنيد بايد هرکدام را جداگانه اضافه کنيد. بعنوان مثال، برای افزودن فضانام System.Web.UI.HTMLControls به صفحات با فضانام های موجود، درست بعد از آخرين عبارت مهم به خط بعد برويد و Imports System.Web.UI.HTMLControls را اضافه کنيد. به محض آنکه .Imports System را تايپ کنيد، VS.NET فهرستی از فضانام ها را ظاهر می کند، و می توانيد به سادگی فضانام مورد نظر را با ماوس برگزينيد. امتياز اين فهرست آن است که مجبور نيستيد همه فضانام های NET. را از حفظ بدانيد، بلکه می توانيد به آسانی از فهرست انتخاب کنيد. اين ويژگی با عنوان Intellisense شناخته می شود. برای صفحات ASP.NET از اين ترکيب استفاده کنيد:


< %@ Import namespace = "System.Web.UI.WebControls" % >
< %@ Import namespace = "System.Web.UI.HTMLControls" % >
< %@ Import namespace = "namespace name" % >
...


برای صفحات codebehind ويژوال بيسيک از اين ترکيب استفاده کنيد:


Imports System.Web.UI.WebControls
Imports System.Web.UI.HTMLControls
Imports namespace

TAHA
10-28-2009, 10:53 PM
یکی از موضوعاتی که معمولا برنامه نویسان محیط ASP.NET با آن مواجه هستند صفحه بندی اطلاعات دریافتی از دیتابیس درون GridView است ( که براحتی قابل انجام هست) . از طرفی در بسیاری از مواقع دوست داریم اطلاعات رو در بیش از یک ستون نمایش دهیم که مجبوریم از کنترل DataList استفاده کنیم چون GridView خاصیت RepeatColumns رو نداره و دقیقا مشکل همین جاست زیرا DataList هم خاصیت paging رو نداره . بنابراین برای استفاده از هر دو خاصیت RepeatColumns و paging به مشکل بر خواهیم خورد . در این مقاله مختصر آموزشی قصد دارم راه حلی بسیار ساده و البته اصولی رو براتون شرح بدم که مشکل فوق رو براحتی حل می کنه .
در دات نت کلاسی با عنوان PagedDataSource در System.Web.UI.WebControls namespace وجود داره که قابلیت paging رو برای کنترل های دات نت فراهم می کنه . ما با استفاده از این کلاس خاصیت paging رو به کنترل DataList اضافه می کنیم . (این مطلب در مورد Repeater هم صادق هست)
ابتدا یک پروژه وب سایت ایجاد کنید و در صفحه Default.aspx کدهای HTML زیر را وارد کنید :


Code:


<table width="100%" border="0">
<tr>
<td> DataList control with Paging</td>
</tr>
<tr>
<td> <asp:label id="lblCurrentPage" runat="server"></asp:label></td>
</tr>
<tr>
<td> <asp:button id="cmdPrev" runat="server" text=" << " OnClick="cmdPrev_Click"></asp:button>
<asp:button id="cmdNext" runat="server" text=" >> " OnClick="cmdNext_Click"></asp:button></td>
</tr>
</table>
<asphttp://pnu-club.com/imported/2009/06/9.gif a t aList ID="dlPaging" runat="server" RepeatColumns="2">
<ItemTemplate>
<asp:Image ID="img1" runat="server" ImageUrl='<%#DataBinder.Eval(Container.DataItem,"i mageURL") %>' />
<asp:Label ID="Label2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"image Name") %>'></asp:Label>
</ItemTemplate>
</asphttp://pnu-club.com/imported/2009/06/9.gif a t aList>



حالا میریم به Code View :
در متد Page_Load کد زیر را وارد می کنیم :


Code:


if (!IsPostBack)
{
;()FetchDataToDataList
}


و سپس کد مربوط به متد FetchDataToDataList :

Code:



private void FetchDataToDataList()
SqlConnection con = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=yourDataBase;Data Source=YourServer");
SqlCommand cmd = new SqlCommand("select imageUrl,imageName from imageTable", con);
con.Open();
PagedDataSource pagedDS = new PagedDataSource();
DataTable dt = new DataTable("_T");
dt.Load( cmd.ExecuteReader());
pagedDS.DataSource =dt.DefaultView;
pagedDS.AllowPaging = true;
pagedDS.PageSize = 5;
pagedDS.CurrentPageIndex = CurrentPage;
dlPaging.DataSource = pagedDS;
dlPaging.DataBind();
con.Close();

lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of "+ pagedDS.PageCount.ToString();
// Disable Prev or Next buttons if necessary
cmdPrev.Enabled = !pagedDS.IsFirstPage;
cmdNext.Enabled = !pagedDS.IsLastPage;
}

همونطور که در کد بالا می بینیم ابتدا connection مورد نظر رو می سازیم و توسط sqlCommand دستور select مورد نظرمون رو اجرا می کنیم . قبل از اجرای select از کلاس PagedDataSource یک نمونه با نام pagedDS ایجاد می کنیم . همچنین یک Table با نام dt ایجاد کرده و با اجرای sqlCommand آن را پر می کینم . حالا لازمه شیئ pagedDS رو توسط dt پر کنیم و تنظیمات لازم مربوط به خاصیت paging رو براش ست کنیم .در نهایت مشخص می کنیم که CurrentPageIndex مقدار صفر داشته باشه تا صفحه اول اطلاعات در ابتدا نمایش داده شوند . و در آخر شیئ pagedDS رو به خصوصیت dlPaging.DataSource انتصاب می دیم.در اینجا لازمه درباره CurrentPage توضیح بدم .
CurrentPage یک property هست که در هر لحظه شماره صفحه جاری را در this.ViewState["_CurrentPage"] نگهداری می کنه . کد این property به شرح زیره :

Code:


public int CurrentPage
{
get
{
// look for current page in ViewState
object o = this.ViewState["_CurrentPage"];
if (o == null)
return 0; // default page index of 0
else
return (int)o;
}

set
{
this.ViewState["_CurrentPage"] = value;
}
}


حالا لازمه برای دو دگمه ای که ما رو به صفحات قبل و بعد می بره کدهای زیر رو بنویسیم :





Code:


protected void cmdPrev_Click(object sender, EventArgs e)
{
// Set viewstate variable to the previous page
CurrentPage -= 1;

// Reload control
;() FetchDataToDataList
}
protected void cmdNext_Click(object sender, EventArgs e)
{
// Set viewstate variable to the previous page
CurrentPage += 1;

// Reload control
;() FetchDataToDataList
}


با این روش ساده به راحتی می تونیم خاصیت paging رو به کنترل مورد نظرمون اضافه کنیم .

TAHA
10-28-2009, 10:54 PM
آموزش : افزورن attribute به تگ های Master Page از درون Content Pageو در حال اجرا


مشکلی که وجود داره اینه که ما از درون صفحات Content نمی تونیم به تگ های HTML موجود در صفحه Master به راحتی دسترسی داشته باشیم . برای حل این مشکل به طریق زیر عمل می کنیم .
فرض کنید در وب سایتمون یک صفحه Master با نام MyMasterPage.master و یک صفحه Content با نام Default.aspx داریم .فرض بفرمایید در صفحه Master متنی با عنوان "تست نوع فونت این صفحه!" وجود داشته باشه . تگ <body> صفحه Master دارای attribute زیر هست :



Code:


<body style="font-family:Arial">



حال ما می خوایم از درون صفحه Default.aspx مقدار Font-family رو از Arial به Tahoma تغییر بدیم.
برای این کار مراحل زیر را انجام می دیم :
برای اینکه بتوانیم به تگ <body> دسترسی داشته باشیم لازمه خصوصیت سروری رو به اون افزوده کنیم :




Code:


<body id="MasterPageBodyTag" runat="server" style="font-family:Arial">




توجه داشته باشید که id این تگ رو MasterPageBodyTag نام گذاری کردیم .

برای اینکه براحتی بتونیم از درون CodeBehind به این تگ دسترسی داشته باشیم برای اون یک property از نوع public تعریف می کنیم . کد زیر را در CodeBehind صفحه MyMasterPage.master وارد می کنیم:




Code:


using System.Web.UI.HtmlControls;
public HtmlGenericControl BodyTag
{
get
{
return MasterPageBodyTag;
}
set
{
MasterPageBodyTag = value;
}
}




دقت کنید که MasterPageBodyTag از نوع System.Web.UI.HtmlControls.HtmlGenericControl هست. حالا برای اینکه ما بتونیم به خصوصیات تگ <body> که درون property فوق تعریف شده از درون صفحه Default.aspx دسترسی داشته باشیم لازمه که directive زیر را به ابتدای کدهای HTML صفحه Default.aspx اضافه کنیم .


Code:


<%@ MasterType TypeName="MyMasterPage" %>





در واقع این کد به ما اجازه میده تا بتونیم به پراپرتی BodyTag موجود در صفحه Master دسترسی داشته باشیم.
بنابراین در جایی دلخواه از صفحه Default.aspx (مثلا در Page_Load) کد زیر را وارد می کنیم :



Code:


Master.BodyTag.Attributes.Add("style", "font-family:Tahoma");




حالا برنامه رو اجرا کنید . همان طور که خواهید دید متن "تست نوع فونت این صفحه!" به جای آنکه با فونت Arial نمایش داده شود با فونت Tahoma دیده خواهد شد . این مطلب برای کلیه attribute های موجود یک تگ قابل استفاده است .

TAHA
10-28-2009, 10:54 PM
اضافه کردن یوزر کنترل به صورت پویا



چطور یک یوزر کنترل را به صورت پویا به صفحه اصلی اضافه کنیم .

ابتدا به جایی نیاز داریم که توسط آنجا بتوانیم یوزر کنترل را در جای مناسبی قرار دهیم .

در مثال ما از یک td که به صورت runat=server است استفاده کرده ایم ، شما میتوایند از هرچیزی مثلا placeholder استفاده کنید :



<table cellpadding="0" align="center" cellspacing="0">
<tr>
<td runat="server" id="MainTD">
</td>
</tr>
</table>






برای اینکه ببنید runat=server کجا استفاده شده آن را قرمز کردم ، متوجه id این td هم باشد id="MainTD" که لازم است آن را در کد بیهایند بالا PageLoad تعریف کنید به این صورت :



protected System.Web.UI.HtmlControls.HtmlTableCell MainTD;



خوب حالا میماند اضافه کردن کنترل به صفحه :



string pageStr ;
pageStr = Request.QueryString["PageID"];
Control ctrl;
ctrl = LoadControl(pageStr + ".ascx");
MainTD.Controls.Add(ctrl);

TAHA
10-28-2009, 10:54 PM
آموزش : چگونه پسوند صفحات وب را مخفی کنیم !!!



برای این کار راههای مختلفی در اینترنت وجود داره و که من به یکی از راحت ترین و بهترینشون می پردازم .
ابتدا باید در مورد یکی از متدهای موجود در دات نت که این امکان رو به ما میده صحبت کنم . متد HttpContext.RewritePath() به ما این اجازه رو می ده که به طور داینامیک آدرسی خاص که توسط مرورگر درخواست میشه رو به مسیری جدید redirect کنیم . به عنوان مثال هر گاه آدرسhttp://www.mysite.com/mypage.html (http://forum.patoghu.com/redirector.php?url=http%3A%2F%2Fwww.mysite.com%2Fm ypage.html) درخواست شد ، به آدرسhttp://www.mysite.com/mypage.aspx (http://forum.patoghu.com/redirector.php?url=http%3A%2F%2Fwww.mysite.com%2Fm ypage.aspx)هدایت بشیم .

خب ، با دونستن این مطلب مساله رو به این شکل فرض می کنیم که : ما یک وب سایت داریم به نامhttp://www.hideextensions.com/ (http://forum.patoghu.com/redirector.php?url=http%3A%2F%2Fwww.hideextensions .com%2F)که این سایت حاوی یک دایرکتوری به نام Dir1 می باشد و درون این دایرکتوری دو صفحه موجود است به نام های Page1.aspx و Page2.aspx . در root سایت هم صفحه Default.aspx رو داریم که حاوی دو Button هست که هر یک ما رو هدایت می کنه به یکی از دو صفحه فوق .
حالا می خوایم زمانی که به صفحه Page1.aspx میریم در نوار آدرس این تغییر بوجود بیاد :


http://www.hideextensions.com/Dir1/Page1.aspx (http://forum.patoghu.com/redirector.php?url=http%3A%2F%2Fwww.hideextensions .com%2FDir1%2FPage1.aspx)
--->http://www.hideextensions.com/Dir1/Page1/ (http://forum.patoghu.com/redirector.php?url=http%3A%2F%2Fwww.hideextensions .com%2FDir1%2FPage1%2F)


راه حل : به سایتمون فایل global.asax را اضافه می کنیم . ( کلیک راست بر روی وب سایت ، انتخاب گزینه Add New Item… و انتخاب گزینه Global Application Class ) . سپس درون این فایل متد زیر را اضافه می کنیم :


Code:



void Application_BeginRequest(object sender, EventArgs e)
{

string fullOrigionalpath = Request.Url.ToString();

if (fullOrigionalpath.Contains("~/Dir1/(.+)/"))
{
Context.RewritePath("~/Dir1/$1.aspx");
}

}




این متد زمانی فراخوانی میشه که یک درخواست برای مشاهده یک آدرس به سرور ارسال میشه . آدرس درخواست شده درون متغیر fullOrigionalpath ذخیره میشه و بررسی می کنیم چنانچه این آدرس متعلق به یکی از صفحات درون دایرکتوری Dir1 باشه و شکل آدرس درخواستی مثلا به شکل ~/Dir1/Page1/ باشه اون رو به آدرس واقعیش هدایت کنه . عبارت (.+) به معنای "هرچیزی" هست ، یعنی هر چیزی بعد از /Dir1/ بیاد به جای عبارت $1 در دستور Context.RewritePath("~/Dir1/$1.aspx"); قرار بگیره . مثلا اگر ما آدرس ~/Dir1/Page1/ رو درخواست کنیم به آدرس ~/Dir1/Page1.aspx میریم .
حالا لازمه مجوزهایی رو درون web.config ایجاد کنیم که به ما اجازه پردازش آدرسهای فوق رو بده . برای این کار یک dll بسیار مفید (http://forum.patoghu.com/redirector.php?url=http%3A%2F%2Furlrewriter.net%2F wp-content%2Furlrewriternet170.zip) و کارساز وجود داره که لازمه دانلود کنیم . پس از دانلود این dll که نامش هست Intelligencia.UrlRewriter.dll اون رو به دایرکتوری bin وب سایتمون اضافه می کنیم (add reference) .
حالا به web.config رفته و در زیر تگ <configuration> عبارت زیر رو قرار میدیم.



Code:



<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.Rewr iterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>



و پس از تگ <system.web> ، عبارت زیر را :



Code:


<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule , Intelligencia.UrlRewriter"/>
</httpModules>



و بالاخره بعد از تگ بسته </system.web> عبارت زیر را وارد می کنیم :


Code:




<rewriter>
<rewrite url="~/Dir1/(.+)/" to="~/Dir1/$1.aspx" />
</rewriter>



حالا کافیه در صفحه Default.aspx دو عدد Button بگذارید و در رویداد هر یک کدهای زیر رو وارد کنید :



Code:





protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("~/Dir1/Page1/");
}
protected void Button2_Click(object sender, EventArgs e)
{
Response.Redirect("~/Dir1/Page2/");
}




همین!

TAHA
10-28-2009, 10:54 PM
بررسی انواع گزارش گیری های تحت وب توسط ASP.net


برای تهیه گزارش روی برنامه های تحت وب سه راه عمده وجود دارد

1)استفاده از کریستال ریپرتس
2)استفاده از ریپورتینگ سرویس
3)طراحی گزارش با کمک برنامه نویسی .

ابتدا به شرح مختصر هر یک از راه های پیش رو میپردازیم :
کریستال ریپرتس :
ابزار گزارش گیری بسیار کار آمدی که از قبل از تکنولوژی دات نت نیز با ویژال استدیو عرضه شده بوده است . هم اکنون این ابزار پا به پای ویژال استدیو پیشرفت کرده و به قابلیت های آضافه شده است . تهیه گزارش با این ابزار به بسیار ساده میباشد تا جایی که با استفاده ازجادوگر (ویزارد) این ابزار طراحی گزارش های ساده بسیار آسان بوده و فقط کافی است به بانک اطلاعاتی مربوطه را مشخص کنیم دیگر نیازی نیست نگران صفحه بندی و ظاهر گزارش خود باشیم .
سناریوی استفاده از کریستال ریپرتس در وب دات نت بدین صورت است که یک گزارش آماده که توسط متخصص طراحی کریستال ریپرتس طراحی شده است توسط برنامه نویس مورد استفاده قرار میگیرد گرچه طراحی خود گزارش نیز میتواند توسط برنامه نویس دات نت صورت بگیرد هیچ انتظاری مبنی بر طراحی گزارش از یک برنامه نویس نمیرود ( همانطور که انتظار نمیرود یک برنامه نویس وب یک گرافیست ماهر یا یک انیماتور فلاش باشد ).
گرچه کریستال ریپرتس در نگاه اول بسیار آسان به نظر میرسد و استفاده ازگزارش آماده آن توسط برنامه نویس لذت بخش مینماید ، در صورتی که برنامه نویس بخواهد خود ساختن یک گزارش حرفه ای را که کمی از گزارش معمولی پیچیده تر است به عهده بگیرد بدون شک خود را در دردسر بزرگی انداخته است !

ریپورتینگ سرویس :
یکی از ابزارهایی که در SQL server 2005 به نحو شایسته ای بدان پرداخته شده است ریپورتینگ سرویس میباشد که با SQL SERVER 2005 عرضه میشود . این ابزار بسیار قدرتمند است و در ساختن گزارش ها و ایجاد نمودار ها بسیار کارامد میباشد . از طرف دیگر تهیه گزارشهایی با قال بندی پیچیده توسط آن نسبت به تهیه گزارش به وسیله کریستال ریپورتس ساده تر میباشد.

ایجاد گزارش ها در نظر اول با هریک از ابزار های بالا از ایجاد گزارش توسط برنامه نویسی روی وب فرم منطقی تر به نظر میرسد . لیکن اکثر هاستینگ هایی که به صورت مشارکتی سروری را به چندین سایت تخصیص میدهند قالبیت های پایه هیچ یک از این ابزار ها را ندارند . به عبارت دیگر کریستال ریپرتس روی سرور وب و ریپورتینگ سرویس روی اس کیو ال سرور نصب نیست ! دلیل منطقی هم دارند ! چون این ابزارها قابل کنترل نیستند و برای هر گزارش ممکن است منابع بسیار زیادی از سرور مصرف شود . شما شاید نتوانید فشاری که ممکن است با این کار برای حتی چندین دقیقه بابت هر گزارش به سرور تحمیل شود را تصور کنید . به هر حال عاقلانه این است که چنین امکانی روی یک سرور اشتراکی موجود نباشد !

پس چه کنیم !؟!
اگر مجبورید نرم افزار تحت و ب خود را روی جایی غیر از یک سرور اختصاصی نصب کنید چاره ای که برای شما میماند آن است که با همان ابزارهای معمولی برنامه نویسی وب گزارش خود را پیاده سازی کنید .
بهترین کار این است که فشار این گزارش را بین SQL server و web server تقسیم کنید ! و عاقلانه این است که برنامه خود را به نحوی بنویسید که کمترین فشار به سرور وارد شود . بین منظور باید از ترکیبی از برنامه نویسی روی SQL با دستورات T-SQL و همینطور برنامه نویسی روی وب توسط ASP.net بهره ببرید. گرچه کار طاقت فرسایی مینماید ولی نتیجه بهتری عاید شما خواهد شد .

TAHA
10-28-2009, 10:55 PM
دستکاری تصاویر در دات نت

در دات نت همیشه کارهای بزرگ را می‌توان با چند خط کوتاه، برنامه‌ی ساده انجام داد. یکی از این کارها ترسیم و دستکاری تصاویر است. در این مقاله سعی می‌کنیم دستکاری تصاویر با دات نت را با هم مرور کنیم. یاد آور می‌شوم که مقاله‌ای در باب ترسیم، با نام گرافيک در ASP.NET توسط دوست خوبمان آقای مجتبی کيانی قبلا در سایت منتشر شده است که مطالعه آن به شما پيشنهاد می‌کنم.



در دات نت ترسیم یک تصویر همیشه با استفاده از شیئی از کلاس Graphics روی می‌دهد. و می‌دانیم متد DrawImage از این کلاس، متدی غنی برای اجرای کارهای گیج کننده گرافیکی به صورت خیلی ساده است. متد دیگری نیز با نام DrawImageUnscaled وجود دارد که این متد فقط وقتی مورد استفاده قرار می‌گیرد که مستطیل‌های منبع و مقصد همسان باشند.



قبل از هرچیز برای ترسیم باید بدانیم:



۱- همیشه یک مستطیل مقصد وجود دارد (در حقیقت مساحتی که تصویر داخل آن کپی میشود).

۲- همیشه یک مستطیل منبع وجود دارد که ممکن است تمام یا بخشی از تصویر اولیه را در بر بگیرد (در حقیقت مساحتی از تصویر اولیه که می‌خواهیم کپی شود).

۳- مستطیل مقصد ممکن است کوچکتر یا بزرگتر مستطیل منبع باشد (در این صورت اندازه تصویر ایحاد شده با اندازه تصویر اولیه فرق خواهد کرد).



همینطور دانستن نکات زیر برای ترسیم به ما کمک میکند:

۱- به هنگام ترسیم تصویر می‌توان با استفاده از ImageAttributes در تصویر تغییراتی داد، در این صورت بسیاری از عملیات پیچیده ترسیم به راحتی ممکن می‌گردد.

۲- شیئی از کلاسGraphics می‌تواند برای تغییر اندازه نیز استفاده شود، همینطور این شیئ دارای *****های الحاقی میباشد که بر کیفیت و سیمای تصویر اثر میگذارند.



در مثال‌های زیر می‌بینیم که چطور متد DrawImage مورد استفاده قرار میگیرد. "myGraphics" شئی از کلاس graphics و "img" تصویری که در حافظه ذخیره شده است فرض شود. شما می‌توانید عملکرد هرقسمت را به ترتیب در مثال نمونه همراه این مقاله مشاهده کنید (توجه داشته باشید که چون این نمونه مثال روی دستگاه شما فایل result.jpg را می‌نویسد، ممکن است هنگام اجرا با ایراد امنیتی روبرو شوید، در این صورت به سند readme.doc در بین فایل‌های مثال رجوع کنید).



۱- یک کپی مستقیم از تصویر:


myGraphics.DrawImage(img,<poin>);


نقاط X و Y مختصات گوشه بالا سمت چپ مستطیل منبع را بیان می‌کند. در این مثال مستطیل مقصد ما هم اندازه مستطیل منبع ما بود. اما اگر بخواهیم مستطیل مقصد بزرگ تر باشد (و در نتیجه تصویر بزرگ تر از حالت اولیه خود باشد) می‌توانید به صورت زیر عمل کنید توجه داشته باشد که در این حالت ممکن است تصویر کیفیت مطلوب خود را از دست بدهد (همینطور می‌توان مستطیل مقصد را کوچکتر از مستطیل منبع تعریف کرد که واضح است تصویر کوچکتر از تصویر اولیه خواهد بود).


۲- کپی با اندازه های متفاوت:


yGraphics.DrawImage(img,BiggerRectangle);



در این حالت مستطیل منبع کل تصویر اولیه خواهد بود (واضح است که BiggerRectangle مستطیل مقصد می‌باشد) اما اگر بخواهیم فقط قسمتی از تصویر اولیه را استفاده کنیم. مستطیل منبع باید قسمتی از تصویر اولیه باشد.


۳- انتخاب قسمتی از عکس اولیه:


DistRectangle=new Rectangle(100,100,10,10);// مستطیل مقصد

myGraphics.DrawImage(img, DistRectangle,75,40,10,10,GraphicsUnit.Pixel);



این مثال نشان می‌دهد که میتوان مستطیل منبع (یا مقصد) را مستقیما در پارامترهای DrawImage تعریف کرد. در ضمن در مورد GraphicsUnit، به یاد داشته باشیم که همیشه واحد گرافیک Pixel است. در مثال بالا مستطیل مقصد نیز به اندازه مستطیل منبع است. اما اگر بخواهیم اندازه قسمت کپی شده را تغییر دهیم باید مستطیل مقصد را با اندازه‌ای متفاوت از مستطیل منبع تعریف کنیم.



۴- انتخاب قسمتی از عکس اولیه و اعمال تغییر اندازه:




DistRectangle =new Rectangle(10,20,120,40);// مستطیل مقصد

SourRectangle =new Rectangle(75,40,10,10);// مستطیل منبع

myGraphics.DrawImage(img, DistRectangle, SourRectangle,GraphicsUnit.Pixel);



چرخاندن (Rotating) و تغییر صورت (transformation) یک تصویر نیز توسط شیئی از Graphics کلاس مقدور است. برای transformation باید یک ماتریس تعریف کنید. در این مثال، ما تصویر را به اندازه 30 درجه در جهت خلاف عقربه های ساعت می‌چرخانیم.



۵- چرخاندن با مقیاس درجه:




Matrix mx = new Matrix();

mx.Rotate(-30);

myGraphics.Transform = mx;

myGraphics.DrawImage(img,new Point(100,50));

یا می‌توانید به شکل زیر تغییر اندازه و چرخاندن را انجام دهید.



۶- چرخاندن با مقیاس طول و عرض:




Matrix mx = new Matrix();

mx.Translate(20.0F, 10.0F);

myGraphics.MultiplyTransform(mx);

myGraphics.RotateTransform(20.0F);



در این مثال 20.2F و 10.0F به ترتیب X و Yای هستند که به صورت ماترس ترجمه می‌شوند.



روش دیگری برای ایجاد تغییر زاویه وجود دارد و آن استفاده از مختصات نقاط به هنگام تعریف مستطیل‌ها است (تصویر حاصل از این روش حالتی آیینه‌ای نسبت به تصویر اولیه دارد). برای انجام این عمل مستطیل مقصد به صورت معمولی تعریف میشود اما به هنگام تعریف مستطیل منبع به شکل زیر عمل میکنیم.



۷- ایجاد حالت آینه‌ای:




Rectangle DistRectangle = new Rectangle(50,50,320,240);

Rectangle SourRectangle= new Rectangle(0, img.Height, img.Width,- img.Height);

myGraphics.DrawImage(img,DistRectangle,SourRectang le,GraphicsUnit.Pixel);



ترسیم تصویرهای شفاف توسط کلاس ImageAttributes انجام می‌شود. چنین شیئی میتواند یک ColorMatrix در خود ذخیره کند که توسط آن میتوان alphaی یک تصویر را هنگام ترسیم تغییر داد. از میان تمام propertyها میتوان به ColorMatrix.Matrix33 اشاره کرد که شما را قادر میکند کاملا شفافیت یک تصویر را تنظیم کنید.



۸- ترسیم های شفاف:



myGraphics.DrawImage(img1,new Point(0,0));

ImageAttributes ia = new ImageAttributes();

ColorMatrix cm = new ColorMatrix();

cm.Matrix33=0.5f;

ia.SetColorMatrix(cm);

myGraphics.DrawImage(img2,new Rectangle(0, 0, img2.Width, img2.Height ), 0, 0, img2.Width, img2.Height, GraphicsUnit.Pixel, ia);



۹- ایجاد Thumbnail از یک تصویر:



مطلب دیگری که خوب است در باره آن مختصری بحث شود ایجاد Thumbnail از یک تصویر است. اگرچه در این روش از شئی از Graphics استفاده نمی‌شود اما بجاست که استفاده از این روش برای کوچک کردن عکس ها با روش (شماره ۱۰) مورد مقایسه قرار گیرد. Thumbnailها تصویرهای کوچکی هستند که معمولا در گالری‌های تصویر برای پیش نمایش با اندازه کوچک و به تعداد زیاد در یک صفحه نمایش داده می‌شوند. برای تولید آن از روش زیر استفاده می‌کنیم:


System.Drawing.Image.GetThumbnailImageAbort myCallBack = new System.Drawing.Image.GetThumbnailImageAbort(Thumbn ailCallback);

System.Drawing.Image imgResizedImage = MainPic.GetThumbnailImage(360,270,myCallBack,IntPt r.Zero);

پارامترها:

به ترتیب از چپ به راست: (عرض، طول، callback و callbackData) هستند که callback یک نماینده برای Image.GetThumbnailImageAbort است. در نگارش 1.0 +GDI، نماینده عملا مورد استفاده قرار نمی‌گیرد. اما شما حتماً باید یک نماینده بسازید و آن را به یک مرجع منتصب کنید (برنامه نمونه را نگاه کنید). callbackData نیز همیشه IntPtr.Zero است.



اگر تصویر اولیه، در خود Thumbnail به صورت ذخیره شده داشته باشد این متد آن را به اندازه خواسته شده تغییر اندازه می‌دهد و در غیر این صورت این متد با کوچک کردن سایز تصویر اصلی Thumbnail می‌سازد. برای ایجاد تصویرهایی با اندازه کوچک (برای مثال 120 در 120) این متد بسیار کار آمد است اما در صورتی که بخواهیم تصویر را در اندازه های بزرگ تری کوچک کنیم، احتمال افت کیفیت برای تصویرها وجود خواهد داشت. در این حالت توصیه می‌شود که تصویر اصلی را با استفاده ازDrawImage کوچک کنید. روش زیر برای تغییر اندازه تصویرها در اندازه‌های بزرگتر روشی کارآمدتر است.



۱۰- تغییر اندازه:




System.Drawing.Image NewImage = new System.Drawing.Bitmap(300,300);

System.Drawing.Graphics NewImageGraphics = System.Drawing.Graphics.FromImage(NewImage);

Rectangle DistRectangle = new Rectangle(0,0,NewImage.Width,NewImage.Height);

Rectangle SourRectangle = new Rectangle(0,0,my1stImage.Width,my1stImage.Height);

NewImageGraphics.DrawImage(my1stImage,DistRectangl e,SourRectangle,GraphicsUnit.Pixel);



در این روش یک Image جدید با نام NewImage را از نوع Bitmap و با اندازه های دلخواه تعریف کردیم و در حقیقت یک کپی از تصویر اولیه را با مستطیل منبع هم اندازه تصویر اولیه روی تصویر جدید با اندازه مستطیل مقصد هم اندازه تصویر جدید ترسیم کردیم.



تمام مباحث به ترتیب در برنامه‌ای گرد آورده شده است. این برنامه دو تصویر را از روی دستگاه شما (سرور) می‌خواند و حاصل هر مرحله را در تصویری با نام result.jpg ذخیره میکند و آن را نمایش می‌دهد. برای اجرای این برنامه کافی است IIS و NET Framework. روی دستگاه شما نصب شده باشد.

zohreh_a65
12-21-2009, 03:34 PM
سلام
ممنون. من برای پروژه م به این مطالب احتیاج داشتم. میتونم استفاده کنم؟
البته با ذکر منبع!

Borna66
12-22-2009, 02:28 AM
سلام
ممنون. من برای پروژه م به این مطالب احتیاج داشتم. میتونم استفاده کنم؟
البته با ذکر منبع!
با سلام
حتما دوست عزيز.
همين كه اين سايت رو به دوستانتون معرفي كنيد و آنها هم از مطالبشون استفاده كنند.خيلي خوب است.
موفق و سلامت باشيد.
روزگار خوش