خانه / برنامه نویسی / آموزش ASP.NET MVC برای مبتدیان-جلسه دوم

آموزش ASP.NET MVC برای مبتدیان-جلسه دوم

در این قسمت اولین پروژه ASP.NET MVC رو میسازیم و یاد میگیریم نحوه رسیدگی به درخواست ها در ASP.NET MVC و ASP.NET Webforms رو بررسی میکنیم.

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

آموزش ASP.NET MVC برای مبتدیان – مقدمه

آموزش ASP.NET MVC برای مبتدیان-جلسه اول

خوب بریم سر آموزش امروز، ویژوال استادیو رو باز کنید و یک پروژه ASP.NET MVC درست کتید و نامی رو برای اون انتخاب کنید و از Template های موجود حالت Empty رو انتخاب کنید.

به پنحره Solution Explorer دقت کنید، پوشه ها و فایل هایی رو میبینید، Models, Views, Controllers و …همه این نام ها به صورت پیش فرض انتخاب شده اند و قابل تغییر هستند که در رابطه با محتوی اونها قدم به قدم صحبت خوهیم کرد.

روی پوشه ی Controllers کلیک راست کنید و یک کنترلر Add کنید، اسمش رو هم HomeController انتخاب میکنبم.با انجام این کار یک فایل با نامی که انتخاب کرذیم به پوشه Controllers اضاقه میشه. به کدهای داخل کلاس دقت کنید میبینید که مشتق شده از Controller هست، پی کنترلر چیست!؟ چیزی نیست جز یک کلاس. که از کلاس Controller ارث بری میکنه.

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

برای شروع اجازه بدید نوع اون رو به string تغییر بدیم که به صورت زیر میشه :

public string Index()
        {
            return "Hellow world!";
        }

خوب یکبار دیگه به کنترلر نگاه کنیم، خیلی ساده س، یک کلاس که تابعی رو داخلش داریم.حالا اگر پروژه رو اجرا کنیم یک صفجه سفید با پیغام Hello World مشاهده میکنیم، به آدرس صفحه دقت کنید! روی نام پروژه توی Solution Explorer کلیک راست کنید و گزینه Properties رو انتخاب کنید و روی تب Web کلیک کنید. دقت کنید در این پنجره تنظیمات به صورتی هستند که ما از Visual Studio Development Server استفاده میکنیم و میخواهیم از Local IIS استفاده کنیم برای اینکار قسمت Use Local IIS Web Server رو فعال کنید سپس روی دکمه Create Virtual Directory کلیک کنید تا دایرکتوری ساخته بشه.

حالا اگه وارد IIS Manager یا همون inetmanager بشید میبینید که نام پروژه شما اضافه شده است، خوب پروژه رو دوباره اجرا کنید میبینید که آدرس تغییر کرده.

آدرس رو به صورت زیر تایپ کنید : http://localhost/ProjectName/Home/Index میبینید که به همون صفحه دوباره لود خواهد شد.ProjectName همون نام پروژه ای هست که انتخاب کردیم، Home نام کنترلر و Index اسم تابع (ActionResult) داخل کنترلر هست، دقت کنید ما به صفحه ای اشاره نکردیم! اما در Webforms زمانی که صفحه Default.aspx رو صدا میزنیم دقیقا به فایلی با نام Default.aspx اشاره میکنیم و کدهای اون صفحه اجرا میشن پس در پروژه های Webforms مستقیما به یک فایل اشاره میکنیم و در ASP.NET MVC به اکشن های یک کنترلر اشاره میکنیم.

پس شما اگر در پروژه ASP.NET MVC مثلا به آدرس http://localhost/ProjectName/Home/GetDetails اشاره کنید با پیغام خطای 404 روبرو میشوید، چرا؟ شما کنترلر Home رو دارید اما Action ای به نام GetDetails ندارید.

خوب کمی هم در باره Controller ها بحث کنیم و اونها رو بهتر بشناسیم.ما وقتی عبارت http://localhost/ProjectName/Home/Index رو در مرورگر میزنیم چطور برنامه میفهمه باید کدوم کنترلر رو پیدا کنه؟جواب همون ASP.NET Routing است، ویژوال استادیو رو باز کنید و پروژه رو اجرا کنید، میبینید که توی آدرس اسمی از نام کنترلر و اکشن نیست! پس چطور کنترلر Home و اکشن Index رو باز کرده؟

فایل Global.asax رو باز کنید، میبینید ما یک رخدادی به نام Application_Start داریم، این رخداد زمانی که اولین بار پروژه رو اجرا میکنیم اجرا میشه. به محتوی این رخداد دقت کنید از کلاس RoutConfig تابع RegsiterRouts رو صدا زدیم، کلاس RoutConfig رو از پوشه App_Start باز کنید به کدها دقت کنید:

 

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

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

حالت پیش فرض رو ببنید اگر کنترلر داده نشده بود خودش Home رو انتخاب میکنه و اگر  Action ای داده نشه اکشنی به نام Index رو لود میکنه و آی دی هم یک پارامتر اختیاریه.شما وقتی آدرسی رو میدید که آی دی نداره به حالت پیشفرض نگاه میکنه و میبینه آی دی یک پارامتر اختیاریه پس مشکلی با اون نداره و لود میکنه.حالا شما یک آی دی پاس بدید به صورت : http://localhost/ProjectName/Home/Index/2 این آی دی میتونه شماره خبر یا نام کاربری یا هر جیز دیگه ای باشه.

خوب برای بدست آوردن آی دی پاس داده شده باید در اکشن مورد نظر تغییراتی بدیم، به صورت زیر :

public string Index(string id)
        {
            return "Id : " + id;
        }

در ابتدا بدون پارامتر صفحه رو باز کنید میبینید که اتفاق خاصی نمی افته حالا با پارامتر صفحه رو باز کنید میبینید که پارامتر برای ما نمایش داده میشه! دلیل اینکه زمان باز کردن صفحه بدون پارامتر پیغام خطا نمیده اینه که پارامتر ما اختیاری هست.

اگر بخوایم دو یا چند تا پارامتر رو ارسال کنیم به چه صورت میشه؟ مثلا http://localhost/ProjectName/Home/Index/2?name=Kamran اگر این آدرس رو باز کتید میبینید تغییری داده نمیشه، خوب در Webforms به راحتی با دستور Request.QueryString این کار رو انجام میدادیم اما در ASP.NET MVC چطور؟بله در ASP.NET MVC هم به همین شکل میشه انجام داد، تغییرات به صورت زیر میشه :

public string Index(string id)
        {
            return "Id : " + id + " Name = " + Request.QueryString["name"];
        }

جالا آدرس بالا رو دوباره باز کنید.

اما راه ساده تر!؟ در ASP.NET MVC میشه به صورت همون آی دی که ارسال کردیم پارامترهای دیگه ای رو هم ارسال و دریافت کنیم :

public string Index(string id,string name)
        {
            return "Id : " + id + " Name = " + name;
        }

حتما دقت کنید که نام متغیر هم نام کوئری استرینگی هست که نیاز داریم : name

دوباره به فایل RoutConfig.cs دقت کنید، عبارتی رو میبینید :

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

منظور از این خط چیست؟ معتی لغوی این خط اینه که میگه مسیریابی رو برای هر فایلی که پسوندش axd هست نادیده بگیر، یعنی اگر کاربر فابلی با پسوند axd رو درخواست کرد اون الگویی که برای آدرس ها تعیین گردیم رو در نظر نگیر، خوب یعنی چی؟ Trace کزدن یکی از امکاناتی هست که در اخیار ما قرار داده شده و برای این کار باید توی فایل Web.Config عبارت زیر رو اضافه کنیم :

<trace enabled="true" pageOutput="false"/>

خوب حالا پروژه رو دوباره اچرا کنید، جالا آدرس زیر رو باز کنید : http://localhost/ProjectName/Trace.axd میبینید که نتیجه برای ما نمایش داده میشه حالا اون خط routs.IgnoreRout رو به صورت کامنت در بیارید و دوباره همین کار رو انجام بدید! بله با خطای 404 روبرو میشیم.

تا قسمت بعدی آموزش خدا نگهدار

مطلب پیشنهادی

تنظیمات در زامارین استادیو

آموزش زامارین قسمت دوم فیلم مقدمه ای بر زامارین

در پست مقدمه ای بر زامارین فلم آموزشی که وب سایت زامارین پرشین آماده کرده است را ...

۸ دیدگاه

  1. خیلی ممنون از آموزش ساده و روانتون موفق باشید

  2. ممنون از آموزش مفیدی که ارائه کردید سپاسگزارم

  1. بازتاب ها: آموزش ASP.NET MVC برای مبتدیان-واکشی اطلاعات از چند جدول

  2. بازتاب ها: استفاده از Business Objects به عنوان Models در MVC

  3. بازتاب ها: آموزش ASP.NET MVC برای مبتدیان-تابع UpdateModel در MVC

  4. بازتاب ها: آموزش MVC برای مبتدیان ساخت ویو برای ثبت اطلاعات در بانک اطلاعاتی

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *