Skip to Content

آرشیو دسته بندی ها:وبلاگ

زبان PHP چیست ؟

زبان PHP چیست ؟

 زبان PHP چیست ؟ 

PHP  (PHypertext Preprocessor) که در ابتدا مخفف (Personal Home Page) بود، یک زبان قدرتمند اسکریپت نویسی(open source) تحت وب و سمت سرور است و برای ساخت وب سایت های پویا و داینامیک مورد استفاده قرار میگیرد .

php  یکی از پر طرفدارترین زبان های اسکریپت نویسی است( php زبان برنامه نویسی نیست.)
زبان php برای سایتهایی که کاربران زیاد و ترافیک بالایی دارد  و به روزرسانی به صورت مرتب انجام میشود، مناسب است .

زبان PHP چیست ؟

زبان PHP چیست ؟

 

زبان اسکریپت نویسی چیست و چه تفاوتی با زبان برنامه نویسی دارد ؟

در زبان اسکریپت نویسی کد های نوشته شده مثل زبان برنامه نویسی کامپایل نمیشوند، به این معنی که هرگاه بخواهیم میتوانیم کدها را تغییر داده و محتوای صفحه را تغییر دهیم.

Php  در حقیقت توسط زبان برنامه نویسی C نوشته و کامپایل شده است و اسکریپت های نوشته شده توسط هسته php  پس از کنترل اجرا میشود.

تفاوت اصلی این دو در این است که ابتدا زبان برنامه نویسی نوشته شده و کامپایل میشود(دیگر تغییر نمیکند) ، سپس زبان اسکریپت نویسی با استفاده از زبان برنامه نویسی  و بر پایه ی آن کد نویسی میکند(میتوانید تغییر دهید.)

زبان PHP چیست ؟

PHP چگونه کار میکند ؟

دستورات و کد های زبان php   بین کد های html  قرار میگیرد.( Html embeded)

کد های php  روی سرور تفسیر شده و خروجی قابل مشاهده برای کاربر میدهد (مثل Html)

فایل های php  حاوی اسکریپت ، تگ html  و متن است، در هنگام اجرای اسکریپت توسط کاربر ، کدهای Html  را میبیند ولی  کدهای php  برای او قابل مشاهده نمیباشد.

در حقیقت php  بر اساس درخواستی که کاربر از طریق صفحه Html  که برای او قابل دسترسی است، میفرستد اطلاعات را از پایگاه داده خوانده و به کاربر پاسخ میدهد.(پایگاه داده و php  سمت سرور است و html  سمت کاربر)

زبان PHP چیست ؟

مراحل کار به این شکل است که ابتدا کاربر درخواست خود را ارسال میکند (مثل درخواست مشاهده یک صفحه از سایت ، از طریق کلیک روی لینک یا وارد کردن آدرس سایت)

سپس مرورگر سرور را با استفاده از  DNS پیدا میکند و درخواست را به آن ارسال میکند.

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

زبان PHP چیست ؟

منظور از سمت سرور چیست ؟

اسکریپت ها و دستورها روی سرور اجرا میشود و کاربر امکان ویرایش یا دخالت روی آن را ندارد (صفحات وب سایت روی سرور نگهداری میشود و در صورت درخواست کاربر به مرورگر کاربر منتقل میشود.)(مثل :   asp , php)

منظور از سمت کاربر چیست ؟

اسکریپت ها و دستورها روی مرورگر اجرا میشود و کاربر امکان ویرایش یا دخالت روی آن را دارد) مثل : ( HTML,JS )

زبان PHP چیست ؟

برخی از ویژگی های زبان PHP :

  1. Php قابلیت اجرا روی هر سیستم عاملی را دارد (منظور سیستم عامل روی سرور است)
  2. انتقال برنامه از یک سیستم عامل به سیستم عامل دیگر گاه بدون تغییر و گاهی با تغییرات اندک به راحتی امکان پذیر است.
  3. قابلیت پشتیبانی از واسط خط فرمان را بعد از نسخهٔ ۴٫۳ دارا است (برای ایجاد نرم افزرا های خارج از وب و نرم افزارهای با واسط گرافیکی کاربر استفاده میشود.)
  4. شکل پذیری فوق العاده
  5. همگونی با اغلب بانک‌های اطلاعاتی از جمله MySQL
  6. قابلیت استفاده از php به جای زبان‌هایNET و JSP و Perl
  7. رایگان است.
  8. با اغلب کارگزارهای وب (Web Server) معروف، قابل اجراست.
  9. امنیت بالایی دارد.
  10. منبع باز بودن (باعث سرعت و سهولت در رفع ایرادات وهمچنین دسترسی به منابع رایگان میشود. )
  11. یادگیری و استفاده آسان
  12. سرعت بالا در سرویس دهی نسبت به سایر زبان های برنامه نویسی (مثل asp) و کار با SQL

زبان PHP چیست ؟

زبان PHP چیست ؟

نرم افزار های زیادی با استفاده از  php   ایجاد شده که مشهورترین آنها عبارت است از :

phpBB  و SMF و Mambo و Joomla و PHPNuke و mybb و مدیاویکی

انواع زبان های وب

PHP از چه پایگاه داده هایی جهت ذخیره و بازیابی اطلاعات استفاده میکند ؟

  • MySql
  • Sybase
  • Oracle
  • PostgreSQL
  • Solid
  • Generic ODBC

mysql

سایت های معروفی که از زبان PHP استفاده میکنند :

  • Yahoo
  • Flickr
  • Google
  • Facebook

زبان PHP چیست ؟

همچنین بسیاری از سیستم های مدیریت محتوا نیز از زبان php  استفاده میکنند ، مثل :

(وردپرس)  Wordpress

 (دروپال)  Drupal

 (جوملا)  joomla

(ویبولتین)  vBulletin

وردپرس

برای طراحی و برنامه نویسی سایت خود با زبان PHP با ما تماس بگیرید.

ادامه مطلب

معرفی jQuery

معرفی jQuery

هدف JQuery ، ساده کردن استفاده از جاوا اسکریپت در وب سایت است .

پیش نیاز های دوره

قبل از اینکه شروع به یادگیری JQuery نمایید ، می بایست شناخت کافی نسبت به مفاهیم زیر داشته باشید .

  • HTML
  • CSS
  • JavaScript

JQuery چیست؟

به زبان ساده ، JQuery کتابخانه ای از جاوا اسکریپت است که با نوشتن حداقل کد ، بیشترین عملیات را انجام می دهد. هدف JQuery ساده کردن استفاده از جاوا اسکریپت در وب سایت است .

JQuery ، چندین خط که جاوا اسکریپت را که برای اجرای یک عملیات لازم است ، در یک متد جمع آوری کرده که با اجرای خط کد قابل استفاده می باشند .

همچنین JQuery بسیاری از عملیات پیچیده جاوا اسکریپت مانند فراخوانی های AJAX و دستکاری DOM را ساده می نماید .

کتابخانه JQuery حاوی ویژگی های زیر می باشد :

  • دستکاری HTML/DOM
  • دستکاری CSS
  • توابع رویدادهای HTML
  • افکت ها و انیمیشن ها
  • AJAX
  • ابزارها

نکته : علاوه بر ویژگی های فوق ، تقریبا برای هر عملی اضافه بر عملیات بالا ، پلاگین های JQuery موجود و آماده می باشند .

چرا JQuery؟

با وجود اینکه فریم ورک های جاوا اسکریپتی بسیاری وجود دارند ، اما به نظر می رسد JQuery معروفترین و توسعه پذیرترین آن ها می باشد. بسیاری از شرکت های بزرگ در وب سایت هایشان از JQuery استفاده  می نمایند .

مانند :

  • Google
  • Microsoft
  • IBM
  • Netflix

آیا JQuery در تمام مرورگرها کار می کند ؟

تیم JQuery آگاهی کافی نسبت به انواع مرورگرها دارد و این مسئله را در کتابخانه JQuery لحاظ کرده اند.کدهای JQuery در تمام مرورگرها مشابه هم اجرا می شوند.

 

ادامه مطلب

چگونه به یک برنامه نویس اندروید موفق تبدیل شویم؟!

چگونه به یک برنامه نویس اندروید موفق تبدیل شویم؟!

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

۱- تحصیلات مهم است اما واجب نیست!
شما برای اینکه یک برنامه نویس ماهر شوید نیازی ندارید که تحصیلات آکادمیک در این زمینه داشته باشید. البته مسلم است که اگر داشته باشید برای پیشرفت به شما کمک خواهد کرد ، اما اگر در رشته ی دیگری درس خوانده اید خیلی عذاب وجدان نگیرید. دیر نشده است! هنوز فرصت دارید.
برای مثال خود من ، من تمامی مواردی که در حال حاضر در آن تخصص دارم ، اعم برنامه نویسی اندروید ، طراحی و برنامه نویسی وب سایت و … را خودم یاد گرفته ام و منبع تخصص فعلی من دانشگاه یا موسسه خاصی نبوده است.
این را بدانید که تمام علمی که نیاز دارید ، در دنیای اینترنت (و شاید بتوان گفت در دنیای Stackoverflow) وجود دارد. پس حتما از این منبع لایتناهی علم استفاده کنید. اگر هم دیدید به منابع بیشتری نیاز دارید ، به کتاب فروش محله خود یا شاید میدان انقلاب سری بزنید.

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

۳- صبر داشته باشید!
خودتان را فریب ندهید. در راه برنامه نویس شدن بارها شکست خواهید خورد و این جزئی از این راه است.
برنامه نویسی یعنی کدی را بنویسید و پس از آن باید کلی تلاش کنید که آن کد واقعا بدون نقص کار کند.
در این مسیر است که شما تجربه لازم برای برنامه نویس شدن را کسب خواهید کرد.

۴- تلفن همراه خود را قورت دهید!
این یک نکته مهم برای تبدیل شدن به یک برنامه نویس موفق است.
اگر از تلفن همراه خود یا بهتر بگویم اپلیکیشن های تلفن همراه خود استفاده مداوم نکنید ، بعید می دانم برنامه نویس خوبی شوید.
شما باید بصورت روزانه اپلیکیشن هایی که در مارکت های مختلف منتشر می شوند را رصد کنید و از آنها الگو بگیرید.
اپلیکیشن های موفق را تحلیل کنید و سعی کنید راز موفقیت آنها را دریابید.
تقریبا می توان گفت برنامه نویسی موبایل یک ساختار کلی را دنبال می کند ، شما با این روش به آن ساختار دست خواهید یافت.

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

۶- از ریسک کردن نترسید!
احتمالا خیلی مواقع در شغل شما پیش می آید که برای انجام یک کار ، دو راه در پیش روی خود دارید.
یک راه ساده و سریع و یک راه جدید که تابحال تجربه اش نکردید.
من فقط منظورم موارد مرتبط با برنامه نویسی نیست.
اگر قانونی در شرکت خود دارید که همیشه راه سریع و آسان باید انتخاب شود ، بنظر من بهتر است در بعضی مواقع بیخیال این قوانین شوید و آن کودک درون کنجکاو خود را بیدار کنید. تجربه های جدید همیشه مفید خواهند بود.
بهتر است بعضی مواقع دل به دریا بزنیم.

۷- بدنبال یک تیم باشید.
به عنوان یک برنامه نویس اندروید شاید در اکثر موارد به تنهایی کار کنید. دلیل آن این است که پروژه هایی که دارید شاید به اندازه کافی بزرگ نیستند.
به نظر من برای یک بار هم که شده عضو یک تیم برنامه نویسی شوید و پروژه های بزرگتری را تجربه کنید.
عضویت در یک تیم برنامه نویسی هم هیجان بیشتری دارد و هم تجربه بیشتری برای شما به ارمغان خواهد آورد.

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

۹- از GIT استفاده کنید!
مهم نیست که برای چه پلتفرمی کد نویسی می کنید.
برنامه کنترل نسخه (GIT) دقیقا چیزیست که شما در هر پروژه ای چه برای شرکت شما باشد و چه برای شخص شما کاربرد خواهد داشت.
کنترل نسخه (GIT) مقداری پیچیده است اما نترسید ، فقط کافیست مقداری با آن کار کنید.
GIT بسیار مهم است بویژه زمانی که بصورت تیمی کار می کنید.
اگر نمی دانید گیت(GIT) چیست ، بزودی در مطلبی جداگانه آن را بررسی خواهم کرد.

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

ادامه مطلب

نمایش IP Address با استفاده از #C

نمایش IP Address با استفاده از #C

همانطور که می دانید IP Adress بخشی جدا نا پذیر از شبکه می باشد . شاید عنوان این مقاله زیاد جالب به نظر نرسد ولی در بعضی از پروژه ها شاید نیاز داشته باشیم تا برای بعضی از عملیات آدرس IP کاربر را به دست بیاوریم .راه های مختلفی برای به دست آوردن آدرس IP سیستم وجود دارد از جمله CMD ویندوز.

در ابتدا برای آشنایی بیشتر با استفاده از خود ویندوز آدرس IP را بدست آورده و بعد با استفاده از سی شارپ این کار را انجام می دهیم .

IP Address

بدست آوردن IP Address با استفاده از cms.exe :

ابتدا بر روی دکمه start کلیک و در کادر جستجو cmd.exe را وارد و بعد از پیدا کردن Enter را بزنید تا وارد برنامه شد .برای گرفتن آدرس IP  و نمایش اطلاعاتی درباره شبکه و جزئیات آن ipconfig را نوشته و Enter را بزنید می بینید که لیسیتی از جزئیات شبکه از جمله IP Adress ، Host Name، Getway و … را به شما نشان می دهد.

ipconfig-Get-IPAddress

به دست آوردن IP Address در #C  :

در NET. برای کار با شبکه  و به دست آوردن اطلاعاتی در این باره تعدادی کلاس در System.Net ، namespace داریم .

1 – پروزه جدید از نوع Console ایجاد کنید .

2 – ابتدا namespace زیر را به پروژه اضافه کنید .

Using System.Net;

3- ابتدا HostName را بدست آورده و با استفاده از متد ()GetHostByName و پاس دادن پارامتر HostName با آن IP Asdrress را بدست می آوریم .

static void Main(string[] args)

{

string hostName = Dns.GetHostName(); // Retrive the Name of HOST

Console.WriteLine(hostName);

// Get the IP

string myIP = Dns.GetHostByName(hostName).AddressList[0].ToString();

Console.WriteLine(“My IP Address is :”+myIP);

Console.ReadKey();

}

خروجی کدهای بالا به صورت زیر می باشد :

Get-IPAddress-Using-C#

این مقاله شروعی برای آشنایی بیشتر با System.Net,namespace بود . در مقاله های بعدی سعی می کنیم بیشتر با این namespace و کلاس های آن کار کنیم .

ادامه مطلب

بدست آوردن مشخصات کاربران سايت در ASP.NET

روزانه کاربران زيادی از سايت شما بازديد می کنند و برای هر مدير سايت آمار بازديدها، صفحات بازديد شده، ساعت و تاریخ بازديد، لينک و سايتی که کاربر به واسطه آن از سايت ما بازديد نموده است و . . . از اهميت ويژه‌ای برخوردار است.

1 –  نام دستگاه کاربر و IP آن

1
2
ClientName = Request.UserHostName
ClientIP = Request.UserHostAddress

2 – لينکی که کاربر با کليک بر روی آن سايت را يافته است.

1
REFERER = Request.ServerVariables.Item("HTTP_REFERER");

3 – اطلاعاتی در رابطه با سیستم کاربر (Client)

1
2
3
LANGUAGE = Request.ServerVariables.Item("HTTP_ACCEPT_LANGUAGE  ")
AGENT = Request.ServerVariables.Item("HTTP_USER_AGENT")
Platform = Request.Browser.Platform()

4 – QUERY STRING صفحه حاضر

1
QUERY STRING = Request.ServerVariables.Item("QUERY_STRING")

5 – اطلاعاتی در رابطه با Browser کاربر

1
2
3
Browser = Request.Browser.Browser()
Browser_Type = Request.Browser.Type()
Browser_Version = Request.Browser.Version()

 

ادامه مطلب

آموزش ساخت Multi Threading برای فراخوانی اطلاعات

آموزش ساخت Multi Threading برای فراخوانی اطلاعات

هرچقد کیفیت و کاربرپسند شدن برنامه را در پروژه های خود بالاببریم این امکان برای جذب مشتری بیشتر میشود در این مطلب توسط Multi Threading و یک Progress اطلاعات دسته به دسته load میکنیم.درباره مزایا Multi Threading در ادامه بحث خواهیم کرد.همراه ما باشید.

آموزش ساخت Multi Threading برای فراخوانی اطلاعات

ابتدا بریم برسی کنیم ببینیم چند نخی یا یا مالتی تردینگ چیست !

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

یک پروژه در سی شارپ ایجاد و یک دیتاگرید و یک Button روی آن قرار بدید.(فرمی همانند فرم اول )

یک کلاس با نام “clsProgress” ایجاد کنید و کد زیر را در آن قرار دهید.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private static Thread th = new Thread(new ThreadStart(showProgressForm));                
       public void startProgress()
       {
           th = new Thread(new ThreadStart(showProgressForm));
           th.Name = "first";
           th.Start();           
       }
       private static void showProgressForm()
       {
           frmProgress sForm = new frmProgress();
           sForm.ShowDialog();           
       }
       public void stopProgress()
       {
           th.Abort();
           th = null;
       }

در Load فرمی که ساخته اید کد زیر را قرار دهید.

1
2
3
4
5
6
7
DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
            col1.HeaderText = "UserID ";
            dataGridView1.Columns.Add(col1);
            col1 = new DataGridViewTextBoxColumn();
            col1.HeaderText = "Password";
            dataGridView1.Columns.Add(col1);

در Button فرم نیز کد زیر را قرار بدید !

1
2
3
4
5
6
7
8
9
10
clsProgress cPro = new clsProgress();
cPro.startProgress();
for (int i = 0; i < 9999; i++)
{
    dataGridView1.Rows.Insert( dataGridView1.Rows.Count-1,1);
    dataGridView1[0, i].Value  = i.ToString();
    dataGridView1[1, i].Value = i.ToString();
}
cPro.stopProgress();

ما برای نمایش Loading به کاربر نیازبه یک فرم دیگه داریم یک فرم با نام FrmProgress  بسازید

سعی کنید سایزشو کوچیک کنید و موقعیت نمایش را روی Center Screen قرار بدید که وسط فرم به نمایش دربیاد یک ابزار تصویر که تصویر آن ضمیمه شده به ابزار تصویر اضافه کنید
و کد زیر را به فرم Progress اضافه کنید.

1
2
3
4
5
6
7
public static frmProgress sForm = null;
       public static frmProgress Instance()
       {
           if (sForm == null) { sForm = new frmProgress(); }
           return sForm;
       }

خیلی سخته براتون ! فایل ضمیمه کردم برید دانلودش کنید !

ادامه مطلب

آموزش طراحی فرم popup به زبان jquery

آموزش طراحی فرم popup به زبان jquery

 

پنجره های Popup از پرکاربرد ترین مواردی هستند که توی طراحی ها امروزه استفاده می شن و برای ایجاد چنین پنجره متونید با آموزش امروز یکی ساده ترین و سبک ترین آن ها را باهم بسازیم همراه ما در ادامه باشید.

آموزش طراحی فرم popup به زبان jquery

ابتدا فایل های مورد نیاز را در صفحه قرار میدهیم.

1
2
<script src="jquery.min.js" type="text/javascript"></script>
<script src="jquery.reveal.js" type="text/javascript"></script>

کد فوق را در head اضافه کنید !

بخش بعدی ساخت فایل CSS :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
.big-link {
    display:block;
    margin-top: 100px;
    text-align: center;
    font-size: 12px;
    color: #06f;
}
.reveal-modal-bg {
    position: fixed;
    height: 100%;
    width: 100%;
    background: #000;
    background: rgba(0,0,0,.8);
    z-index: 100;
    display: none;
    top: 0;
    left: 0;
}
.reveal-modal {
    visibility: hidden;
    top: 100px;
    left: 50%;
    margin-left: -300px;
    width: 520px;
    background: #eee url(modal-gloss.png) no-repeat -200px -80px;
    position: absolute;
    z-index: 101;
    padding: 30px 40px 34px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    border-radius: 5px;
    -moz-box-shadow: 0 0 10px rgba(0,0,0,.4);
    -webkit-box-shadow: 0 0 10px rgba(0,0,0,.4);
    -box-shadow: 0 0 10px rgba(0,0,0,.4);
}
.reveal-modal.small {
    width: 200px;
    margin-left: -140px;
}
.reveal-modal.medium {
    width: 400px;
    margin-left: -240px;
}
.reveal-modal.large {
    width: 600px;
    margin-left: -340px;
}
.reveal-modal.xlarge {
    width: 800px;
    margin-left: -440px;
}
.reveal-modal .close-reveal-modal {
    font-size: 22px;
    line-height: .5;
    position: absolute;
    top: 8px;
    right: 11px;
    color: #aaa;
    text-shadow: 0 -1px 1px rbga(0, 0, 0, .6);
    font-weight: bold;
    cursor: pointer;
}

مرحله بعدی کد html برای فراخوانی فرم Popup است.

1
2
3
4
5
<div id="myModal" class="reveal-modal">
    <h4>ساختن پنجره های Pop Up با جی کوئری</h1>
    <p>مدرسه وب ایران ، آموزش طراحی وب سایت به زبان پارسی</p>
    <a class="close-reveal-modal">&#215;</a>
</div>

 

بعد از نوشتن کد فرم و طراحی بخش مورد نظر باید کد فوق را فراخوانی کنیم:

1
<a href="#" data-reveal-id="myModal">کلیک کنید</a>

دقت داشته باشید myModal که در کد بالا میبینید ID کد Html ما را فراخوانی میکنه و به کاربر نمایش میده !

فایل دانلود نیز آماده دانلود شده.موفق باشید.

ادامه مطلب

آموزش مقدماتی Globalization و Localization در Asp.net MVC

آموزش مقدماتی Globalization و Localization در Asp.net MVC

آموزش مقدماتی Globalization و Localization در Asp.net MVC

آموزش مقدماتی Globalization و Localization در Asp.net MVC

ما دراین مقاله سعی می کنیم تا Globalization و Localization در Asp.net MVC را یاد بگیریم و اجرا کنیم.

مدتی پیش یک فیلم تجاری دیدم که می گفت :”حتی کوچکترین کسب و کارها می توانند چند ملیتی باشند.”

این جمله بطور خاص در کسب وکار نرم افزار صحیح می باشد بطوریکه انسان ها از اتاق فروشگاه خودشان ،خدمات را برای کاربران در جای دیگر کره زمین فراهم می کنند.

اگر ما بخواهیم که سایت طراحی شده توسط ما،نیازهای کاربران را در سراسر کره زمین برآورده کند،شاید این یک ایده ی خوبی باشد که Globalization و Localization را در برنامه هایمان یاد بگیریم و اجرا کنیم.

در این مقاله ،ما سعی خواهیم کرد تا ببینیم چه چیزی را برای اجرای Globalization و Localization در Asp.net MVC نیاز داریم.

قبل از شروع مختصری راجع به این دو کلمه توضیح می دهیم.

Globalization ،پروسه ی طراحی یک برنامه در راهی است که آن برنامه بتواند قابل استفاده برای کاربران در سراسر کره زمین(فرهنگ های مختلف)

باشد.

در طرف دیگر،Localization پروسه ای سفارشی سازی شده است که آن برنامه برای فرهنگ و محل جاری می باشد.

استفاده در کد

اجازه دهید ما سعی کنیم تا ببینیم چگونه Globalization و Localization در Asp.net MVC با انجام یک مثال کوچک ،اجرا می شود.

این برنامه شامل تعداد کمی متغیر string  ثابت است،همچنین تعدادی TextBox،Button و validation error.

اجازه دهید ما برنامه رو بدون پشتیبانی هیچ یک از Localization و globalization  اجرا کنیم.سپس می بینیم که چگونه localization  وglobalization را اجرا کنیم. هم اکنون شروع به ساختن یک دمو مدل می کنیم.

1
2
3
4
5
public class Demo
{
    public string Name { get; set; }
    public int Age { get; set; }
}

حال تعدادی صفت های DataAnnotation ،به طور خاص DisplayName و ErrorMessage اضافه می کنیم.

1
2
3
4
5
6
7
8
9
10
public class Demo
{
    [DisplayName("Name")]
    [Required(ErrorMessage="Name is Required")]
    public string Name { get; set; }
    [DisplayName("Age")]
    [Required(ErrorMessage = "Age is Required")]
    public int Age { get; set; }
}

سپس یک کنترولر ساده می سازیم که در آن یک متد Create ساده برای ذخیره داده های مدل خواهیم داشت.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class HomeController : Controller
{
    private static List<Demo> list = new List<Demo>();
    public ActionResult Index()
    {
        return View(list);
    }
    [HttpGet]
    public ActionResult Create()
    {  
        return View();
    }
    [HttpPost]
    public ActionResult Create(Demo model)
    {
        if (ModelState.IsValid)
        {
            list.Add(model);
            return RedirectToAction("Index");
        }
        return View();
    }
}
و در آخر View Page  برای آن:

هم اکنون اگر ما برنامه را اجرا کنیم ،خواهیم دید که View ،دمو مدل را در یک memory collection اضافه می کند.

حالا اجازه بدهید تا ببینیم چه چیزی برای اجرای globalization و localization  نیاز داریم.

اجازه دهید تا شروع به شناسایی همه چیزهایی کنیم که با فرهنگ کاربر تغییر می کند.

حال ما یک کلاس لایبرری ساده که شامل ری سورس فایل ها است را می سازیم.

حال همه ی hard coded string  ها را داخل ریسورس فایل ها در کلاس لایبرری قرار می دهیم.

اگر ما بخواهیم این ریسور س ها را برای چند زبان داشته باشیم ،ما باید ریسورس های جداگانه مربوط به هر ورژن داشته باشیم

برای داشتن ریسورس ها در hindi-Indian ،ما نیاز به ریسورس فایل Resource.hi-in.resx  داریم.

"hi" ،زبان را و "in"،محل را مشخص می کند.

حال ما چه تغییراتی را باید در برنامه مان انجام دهیم تا از این ریسورس فایل ها به جای آن مقدارهای هارد کدی استفاده کند.برای این کار ما یک رفرنس به کلاس لایبرری اضافه می کنیم و از ریسورس فایل ها برای string  ها استفاده می کنیم.

1
2
3
4
5
6
7
8
9
10
public class Demo
{
    [DisplayName(MyResources.Resources.Name)]
    [Required(ErrorMessage=MyResources.Resources.NameRequiredError)]
    public string Name { get; set; }
    [DisplayName(MyResources.Resources.Age)]
    [Required(ErrorMessage = MyResources.Resources.AgeRequiredError)]
    public int Age { get; set; }
}

همچنین hard coded string  ها را در view  تغییر می دهیم.

برای تست کردن تغییرات باید زبان پیش فرض Browser  را به Hindi-Indian  تغییر دهیم.

بنابراین برنامه زبان پیش فرض Browser را چک می کند و برطبق آن زبان و فرهنگ لود می شود.

حال زبان پیش فرض را در IE تغییر می دهیم.

هم اکنون برنامه را اجرا می کنیم و نتیجه را مشاهده می کنیم.

حال ما یک برنامه ای داریم که قابلبت نمایش در دو زبان انگلیسی و هندی را دارد.

ادامه مطلب

آموزش سئو از زبان گوگل

آموزش سئو از زبان گوگل

 

آموزش سئو از زبان گوگل <br/> سایت یا وبلاگ های زیادی در زمینه آموزش سئو و ارائه مقالات فعالیت میکنند که در بعضی موارد گفته های آنها یکدیگر را نقض کرده و موجب سردرگمی افراد میشود.

آموزش سئو از زبان گوگل

آموزش سئو در راهنمای گوگل

سایت یا وبلاگ های زیادی در زمینه آموزش سئو و ارائه مقالات فعالیت میکنند که در بعضی موارد گفته های آنها یکدیگر را نقض کرده و موجب سردرگمی افراد میشود. بهترین مرجع برای آموزش سئو و نکات تاثیرگذار بر رتبه بندی نتایج گوگل بخش راهنمای گوگل است. البته موارد ذکر شده در این بخش بصورت کلی بوده و توضیحات زیادی بهمراه ندارد، برای درک بهتر هریک از این بخش ها میتوانید مقالات تکمیلی وبسیما را مطالعه کنید.

مقاله پیش روآموزش سئو  براساس Webmaster Guidelines گوگل تهیه شده و راهنمای مناسبی برای بررسی سایت شما توسط روبات های گوگل و ایندکس بهتر آن خواهد بود.

راهنمای سئو طرح و محتوای سایت

  1. دسترسی صفحات داخلی سایت و لینک های متنی را به درستی طراحی کنید. هر صفحه در سایت باید حداقل از یک صفحه دیگر سایت دارای لینک ورودی باشد.
  2. نقشه سایت گرافیکی را در دسترس کاربران قرار دهید تا براحتی به بخش های داخلی سایت وارد شوند. اگر تعداد صفحات سایت شما بسیار زیاد است از نقشه چند صفحه ای و تودرتو استفاده کنید.
  3. تعداد لینک های خروجی هر صفحه را در حد معقولی نگه دارید و اجازه ندهید که خیلی زیاد شوند.
  4. محتوای مفید و اختصاصی ارائه دهید و موضوع مورد بحث را بخوبی شرح دهید.
  5. کلمات کلیدی که کاربران ممکن است در گوگل جستجو کرده و به سایت شما وارد شوند را تعیین کرده و مطمئن شوید که در متن شما بکار رفته اند.
  6. برای اطلاعات یا لینک های مهم بجای تصویر از متن استفاده کنید. زیرا روبات های گوگل قادر به تشخیص اطلاعات درون عکس ها نیستند. همچنین با استفاده از تگ ALT توضیحات مختصری برای هر تصویر قرار دهید.
  7. دقت کنید که تگ Title و ALT در صفحات با دقت تعریف شده و مرتبط با متن و موضوع باشند.
  8. لینک های خراب را پیدا کرده و کد HTML خود را تصحیح کنید.
  9. اگر از آدرس دهی دینامیک برای صفحات استفاده میکنید (استفاده از ؟ در آدرس) بدانید که توانایی موتورهای جستجو در ایندکس و بررسی صفحات با آدرس دینامیک به مراتب کمتر است.

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

  1. از یک مرورگر متنی مانند Lynx برای بررسی سایت و نحوه نمایش آن استفاده کنید، زیرا بیشتر موتورهای جستجو و روبات ها امکان تشخیص بخش هایی از سایت مانند کدهای جاوا، فریم، فلش و غیره را ندارند و ممکن است تصویر متفاوتی از سایت شما داشته باشند.
  2. به روبات های گوگل اجازه دهید تا بدون ردگیری در سایت شما فعالیت کنند. تکنیک هایی که برای شناسایی کاربران سایت و مسیر بازدید آنها بکار میروند نباید بر روی عملکرد روبات ها تاثیرگذار باشند زیرا ممکن است موجب اختلال در ایندکس صحیح صفحات شما شوند.
  3. سرور شما باید if-modified-Since را در هدر HTTP ساپورت کند. این امکان به گوگل نشان میدهد که آیا سایت و محتوای شما از آخرین بازدید روبات ها تغییری داشته است یا خیر. این کار در مصرف بهینه پهنای باند شما نیز موثر خواهد بود.
  4. استفاده از فایل robots.txt به روبات های گوگل اطلاع میدهد که چه بخش هایی از سایت را باید بررسی کنند و چه بخش هایی نیاز به بررسی و ایندکس ندارند. با استفاده از ابزار robots.txt analysis tool در وبمستر گوگل میتوانید از صحت عملکرد آن مطمئن شوید.
  5. مطمئن شوید که تبلیغات سایت بر رتبه بندی شما در نتایج گوگل تاثیر نداشته باشند. با استفاده از فایل robots.txt اجازه ایندکس و بررسی آنها را ندهید.
  6. اگر از سیستم های مدیریت محتوا مانند جوملا و وردپرس استفاده میکنید، مطمئن شوید که اجازه دسترسی گوگل به صفحات و لینک های سایت شما را میدهند.
  7. صفحات تولید شده براساس جستجوی داخلی سایت را با استفاده از فایل robots.txt از دید موتورهای جستجو پنهان کنید زیرا ارزشی برای کاربران شما نخواهند داشت و نیازی به ایندکس آنها توسط گوگل نیست.
  8. نحوه نمایش سایت در مرورگرهای مختلف را بررسی کنید تا در همگی آنها بدرستی نمایش داده شود.
  9. عملکرد سایت و سرعت لود شدن صفحات را بهینه کنید. هدف گوگل معرفی بهترین نتایج به کاربران و رضایت آنها از صفحاتی است که به آن وارد میشوند. سرعت بالای سایت موجب رضایت بیشتر کاربران و بهبود کیفیت عمومی اینترنت بخصوص برای کاربرانی با سرعت اینترنت پایین خواهد شد.

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

ادامه مطلب

پیاده سازی فرم لاگین و رجیستر دریک ویو بدون استفاده از Ajax در MVC

پیاده سازی فرم لاگین و رجیستر دریک ویو بدون استفاده از Ajax در MVC

 

در این مقاله به شرح پیاده سازی فرم ورود و ثبت نام دریک ویو در MVC خواهیم پرداخت

پیاده سازی فرم لاگین و رجیستر دریک ویو بدون استفاده از Ajax در MVC

نکته مهم این است که هر فرم مستقل از دیگری رفتار کند ومثلا اگر یکی از فرم‌ها ناقص پر شد و دکمه‌ی ارسال آن فشرده شد، پس از Post-back،فقط و فقط اجرای همین فرم Validate شود و فرم دوم بدون تغییر باقی بماند

در ابتدا باو ویو مدل های فرم های خود را بسازیم روی پوشه Model کلیک راست کرده و یک کلاس به نام MyLoginViewModel بسازید داخل این کلاس فیلد هایی که برای ورود کارب نیاز است همراه با صفت ها برای اعتبار سنجی وارد میکنیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class MyLoginViewModel
{
    [Display(Name = "آدرس ایمیل")]
    [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
    [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
    [EmailAddress(ErrorMessage = "ایمیل وارد شده معتبر نیست")]
    public string Email { get; set; }
    [Display(Name = "کلمه عبور")]
    [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
    [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [Display(Name = " به یاد داشته باش")]
    public bool RememberMe { get; set; }
}

سپس نوبت به ساخت مدل برای فرم ثبت نام میرسد همانند بالا یک کلاس به نام RegisterViewModel    بسازید و فیلد لازم برای ثبت نام و صفت های آنهارا وارد کنید:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class RegisterViewModel
 {
     [Display(Name = "کلمه عبور")]
     [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
     [DataType(DataType.Password)]
     public string UserPassword { get; set; }
     [Display(Name = "تکرار کلمه عبور")]
     [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
     [DataType(DataType.Password)]
     [Compare("UserPassword", ErrorMessage = "کلمه عبور وارد شده یکسان نیستند")]
     public string RepeatPassword { get; set; }
     [Display(Name = "آدرس پست الکترونیکی")]
     [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از 150 کاراکتر باشد")]
     [EmailAddress(ErrorMessage = "ایمیل وارد شده معتبر نیست")]
     public string UserEmail { get; set; }
     [Display(Name = "نام")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از 150 باشد")]
     [Required]
     public string FirstName { get; set; }
     [Display(Name = "نام خانوادگی")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از 150 باشد")]
     [Required]
     public string LastName { get; set; }
 }

پس از ساخت ویو مدل ها نوبت به ساخت پارشیال ویو از روی این مدل ها می باشد دقت کنید که ویو ها باید به صورت پارشیال ساخته شوند:

1
2
3
4
5
6
7
8
public ActionResult Login()
{
    return PartialView();
}
 public ActionResult Register()
{
    return PartialView();
}

حالا در کنترلر خود یک اکشن متد به نام index بنویسید و ویو آنرا بسازید:

1
2
3
4
public ActionResult Index()
{
    return View();
}

و در ویو خود html زیر را بنویسید:

1
2
3
4
5
6
7
8
9
10
11
12
<section>
    <div class="container">
        <div class="row">
            <div class="col-sm-6 col-md-6">
                @Html.Action("Login","Account")
            </div>
            <div class="col-sm-6 col-md-6">
                @Html.Action("Register", "Account")
            </div>
        </div>
    </div>
</section>

همانطور که مشاهده میکنید دو پارشیال ویو فراخوانی شده اند که هرکدام متعلق به یک فرم هستند

پارشیال ویو مربوط به فرم ورود:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@model LoginAndRegister.Models.MyLoginViewModel
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>MyLoginViewModel</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.RememberMe, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model => model.RememberMe)
                    @Html.ValidationMessageFor(model => model.RememberMe, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

و پارشیال ویو مربوط به فرم ثبت نام :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
@model LoginAndRegister.Models.RegisterViewModel
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>RegisterViewModel</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.UserPassword, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.UserPassword, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.UserPassword, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.RepeatPassword, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.RepeatPassword, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.RepeatPassword, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.UserEmail, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.UserEmail, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.UserEmail, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

نکته مهم:

هیچ نوع ورودی برای Html.BeginForm     در نظرنگیرید اگر اکشن متدی را برای صدا زدن در این بخش به کار ببرید هنگام Postback     به مشکل برخورد خواهید کرد؛ چون آدرس آن اکشن متد به شکل صریح در آدرس مرورگر فراخوانی میشود و پارشال ما پس از Post-back     به تنهایی و بدون Layout نمایش داده خواهد شد. اسم بردن از اکشن متد وقتی کارساز است که آن اکشن متد قرار باشد یک Redirect     انجام دهد .

نکته دیگر، که مهم ترین نکته در این مثال می باشد این است که اگر  اکشن متد مربوط به Post-back     مشخص نشود، بطور اتوماتیک تمامی اکشن متدهایی که ویژگی    [HttpPost]     دارند اجرا خواهند شد. این یعنی هر دو اکشن متد   Login و Register     اجرا می‌شوند و بنابر آنچه در اکشن متدها نوشته‌ایم هر دوModelState

بررسی میشوند باید برای جدا سازی این مورد  خاصیت name     مربوط به دکمه‌ها را به شکل یک ورودی برای اکشن متدها بفرستیم و بر اساس وضعیت آن تنها state     مدل مورد نظر خودمان را بررسی کنیم پس در ویوها تغییر زیر را انجام دهید:

برای پارشیال ویو login:

1
<button type="submit" class="btn btn-primary" value="ورود" name="submitValue">ورود</button>

و برای پارشیال ویو ثبت نام:

1
<button type="submit" class="btn btn-success" value="ساخت حساب کاربری" name="submitValue">ساخت حساب کاربری</button>

در این روش سعی کنید از ViewModel   استفاده کنید و سعی کنید ویو مدل‌ها پراپرتی‌های با نام یکسان نداشته باشند.

نوبت به حالت پست می رسد همانطور که گفته شد باید خاصیت name مربوط به دکمه ها را به شکل پارامتر ورودی بگیریم پس حالت پست کنترلرها را به شکل زیر مینویسیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[HttpPost]
      [AllowAnonymous]
      [ValidateAntiForgeryToken]
      public ActionResult Login(MyLoginViewModel login, string submitValue)
      {
          if (submitValue == "ورود")
          {
              if (ModelState.IsValid)
              {
                  //Do Something                  
              }
          }   else
              {
                       ModelState.Clear();
              }      
           return PartialView("Login", login);
      }
      [HttpPost]
      [AllowAnonymous]
      [ValidateAntiForgeryToken]
      public ActionResult Register(RegisterViewModel register, string submitValue)
      {
          if (submitValue == "ساخت حساب کاربری")
          {
              if (ModelState.IsValid)
              {
              //Do Something
              }
          }
          else
          {
              ModelState.Clear();
          }
          return PartialView("Register", register);
      }

این روش نوعی مدیریت میان اکشن متدهای دارای ویژگی HttpPost     است و همانطور که گفتیم به علت اینکه پس از Post-Back     نیاز به ساختار به هم نخورده‌ی صفحه‌ی قبلی داریم، نمیتوانستیم به شکل صریح، اکشن متد برای Html.BeginForm     تعریف کنیم تا این دردسر‌ها را نداشته باشیم.

ادامه مطلب