چرا MVC

در این سری آموزشی می خواهیم MVC 5 را به صورت گام به گام در ۷ روز آموزش دهیم.

همانطور که در عنوان مقاله به شما قول دادیم، MVC را در ۷ روز یاد بگیرید.

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

مقاله اول بیشتر جنبه دست گرمی دارد. در این مقاله می خواهیم بدانیم چرا MVC بر WebForms ارجحیت پیدا کرده است؟

مشکلات موجود در WebForm  چیست و دو پروژه ساده و کوچک در زمینه Controller  و View انجام می دهیم.

فهرست مطالب:

  • مقدمه
  • ابزار موردنیاز برای انجام پروژه های Asp.Net MVC
  • مقایسه ASP.Net، MVC و WebForms
  • چرا ASP.Net Web Forms؟
  • مشکلات Asp.Net WebForms
  • بررسی راه حل این مشکلات
  • ASP.Net MVC چگونه مشکلات موجود در Web Forms را حل می کند؟
  • معرفی Controller در ASP.Net MVC
  • معرفی View در ASP.Net MVC
  • تمرین اول: معرفی Controller با یک “Hello World” ساده
  • پرسش و پاسخ در تمرین اول
  • تمرین دوم: معرفی Viewها
  • پرسش و پاسخ در تمرین دوم
  • آنچه در جلسه دوم می آموزیم!

 MVC

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

پس ما تنها به ۷ روز از وقت شما نیاز داریم تا به یک برنامه نویس ASP.Net MVC تبدیل شوید.

 MVC

ابزار موردنیاز برای انجام پروژه های MVC:
برای این کار ما تنها به ویژوال استودیو نیاز داریم که نسخه رایگان آن را می توانید از اینجا دانلود نمایید.

[highlight color=”green”]مقایسه ASP.Net، MVC و WebForms:[/highlight]

” شما این مقاله را می خوانید، چون با ASP.Net آشنا هستید و می خواهید مهارت خود را به MVC ارتقا دهید.”

بسیاری از برنامه نویسان ASP.Net که برای اولین بار MVC را شروع می کنند، فکر می کنند MVC یک نسخه جدید و متفاوت از ASP.Net است.

اما حقیقت این است که ASP.Net یک فریم ورک برای ایجاد وب اپلیکیشن است درحالی که MVC یک معماری فوق العاده برای سازماندهی و مرتب سازی کدهای ما با روشی بهتر است.

بنابراین علاوه بر MVC می توان گفت ASP.Net MVC.

بسیار خب، اگر ASP.Net MVC یک مفهوم جدید است پس ASP.Net WebForms چیست؟
اجازه بدهید تا توضیح دقیق تری در این باره بدهیم:
“شما این مقاله را می خوانید چون با ASP.Net WebForms آشنا هستید و می خواهید مهارت خود را به MVC ارتقا دهید.”

چرا ASP.Net Web Forms؟

در ۱۲ سال گذشته، ASP.Net WebForms به بهترین نحو وب اپلیکیشن ها را ارائه داده است. اما راز موفقیت و محبوبیت Webform ها چیست؟

اگر به دلیل موفقیت زبان های برنامه نویسی مایکروسافت حتی از زمان VB نگاهی بیندازیم، دلیل آن RAD(Rapid application development) یا همان سرعت توسعه اپلیکیشن و برنامه نویسی به صورت ویژوال (بصری) می باشد.

برنامه نویسی ویژوال در مایکروسافت بسیار موفقیت آمیز بوده که به طور تلویحی نام IDE آن را Visual Studio گذاشتند.

 آموزش MVC

با استفاده از ویژوال استودیو، برنامه نویسان می توانند المنت های UI را در محیط designer و backennd، drag and drop کنند و ویژوال استودیو برای این عناصر، کدهای C# یا VB.Net ایجاد می کند.

به این کدها اصطلاحا “Behind Code” یا “Code Behind” می گویند.

برنامه نویسان می توانند در این کدها منطقی را پیاده سازی کنند و عناصر UI را تغییر دهند.

 آموزش MVC

بنابراین معماری RAD ویژوال دو چیز است:

  • اولی UI
  •  code behind

برای ASP.Net WebForms دو فایل ASPX و ASPX.CS را در اختیار داریم، برای WPF نیز XAML و XAML.CS و…

مشکلات ASP.Net WebForms :

اگر ASP.Net WebForm یک تجربه موفقیت آمیز برای مایکروسافت بود، چرا به فکر تولید ASP.Net MVC افتاد.

مشکل عمده با ASP.Net Webform کارایی آن است. در وب اپلیکیشن ها دو مورد هستند که کارایی اپلیکیشن را تعریف می کنند:

  • Response time(زمان پاسخ): سرور با چه سرعتی به درخواست کاربر پاسخ می دهد؟
  • Bandwidth consumption(مصرف پهنای باند): چه مقدار داده ارسال می شود؟

مشکلات Response time:

حال اجازه دهید نگاه دقیق تری داشته باشیم که چرا زمان پاسخ در ASP.Net Webform زیاد است و به عبارت دیگر اپلیکیشن کندتر می باشد.

در اینجا یک تست ساده از زمان بارگذاری webform و ASP.Net MVC انجام داده ایم که نشان می دهد، سرعت بارگذاری MVC دو برابر بیشتر بوده است.

 معرفی Controller در ASP.Net MVC

حال ببینیم که چرا ASP.Net MVC در تست بالا، کارایی بهتری دارد. کد ساده UI و Code Behind زیر را در نظر بگیرید.

فرض کنید کد ASPX، text box زیر باشد:

&lt;asp:TextBox ID="TextBox1" runat="server"&gt;</pre>

در code behind می توانید کدهایی بنویسید که مقادیر text box را دستکاری کند و رنگ پس زمینه آن را تغییر دهد.
<pre class="lang:c# decode:true ">protected void Page_Load(object sender, EventArgs e)
{
            TextBox1.Text = "put your text here";
            TextBox1.BackColor = Color.Aqua;
}

اگر از برنامه بالا اجرا بگیرید، خروجی به شکل زیر خواهد بود:

 معرفی Controller در ASP.Net MVC

اگر خروجی HTML را با View Source مشاهده نمایید، چیزی شبیه به کد زیر خواهد بود:

&lt;input name="TextBox1" type="text" value="Make it simple" id="TextBox1" style="background-color:Aqua;"

حالا برای چند لحظه از خواندن دست بکشید و به سوالات زیر پاسخ دهید:

  1. آیا این یک راه متفاوت برای تولید HTML است؟ آیا ما واقعا نیاز داریم که این رفت و برگشت نسبتا طولانی را به سرور داشته باشیم تا این کدهای ساده HTML را روی مرورگر دریافت کنیم؟
  2. آیا برنامه نویسان نمی توانند به طور مستقیم این کدهای HTML را بنویسند؟

 مشکلات Asp.Net WebForms

همانطور که مشاهده می کنید، برای هر درخواست یک منطق تبدیل (conversion) وجود دارد که اجرا شده و کنترل های سرور (server Controls) را به خروجی HTML تبدیل می کند.

زمانی که ما tree view، grid و.. داشته باشیم، این تبدیل راه حل مناسبی نبوده و کار پرحجمی است چرا که خروجی HTML و جدول های HTML کار را پیچیده می کنند.

به دلیل همین تبدیل غیرضروری زمان پاسخ تحت تاثیر قرار می گیرد.

راه حل این مشکل: از Code Behind خلاص شوید و تنها با HTML کد بزنید.

مصرف پهنای باند:

ViewState به نوعی دوست آشنا و صمیمی برنامه نویسان ASP.Net در ۱۰ سال گذشته می باشد، چرا که به طور اتوماتیک وضعیت جاری را در هر post back ذخیره می کند و زمان توسعه کد را کاهش می دهد.

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

در این تست متوجه شدیم که ViewState حجم صفحه را در مقایسه با MVC دوبرابر می کند.

شکل زیر، طول محتوا در Web Form و MVC را نمایش می دهد.

 مشکلات Asp.Net WebForms

اندازه صفحه به این دلیل افزایش می یابد که ViewState بایت های اضافی تولید می کند، تصویر زیر، viewState را نمایش می دهد.

 مشکلات Asp.Net WebForms

راه حل: کنار گذاشتن Server Controls

سفارشی سازی HTML:

حال که ما می خواهیم مشکل code behind و کنترل های ASP.Net را رفع کنیم، هیچ ایده ای درباره اینکه چه نوع HTML ای می تواند جایگزین آن شود و چه میزان کارایی خواهد داشت، نداریم.

برای مثال، کد ASPX زیر را مشاهده کنید، می توانید حدس بزنید که این کد چه کد HTMLای تولید می کند؟

&lt;asp:Label ID="Label1" runat="server" Text="I am label"&gt;
&lt;asp:Literal ID="Literal1" runat="server" Text="I am a literal"&gt;
&lt;asp:Panel ID="Panel1" runat="server"&gt;I am a panel

کنترل Lable تگ Div تولید خواهد کرد یا Span؟ اگر کد بالا را اجرا نمایید، به ترتیب تگ های HTML زیر تولید خواهد شد:

Lable تگ Span، رشته متنی یک متن ساده و Panel یک تگ Div تولید می کنند.

&lt;span id="Label1"&gt;I am label&lt;/span&gt;</pre>

I am a literal</pre>

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

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

طراحان می توانند کدهای HTML را برداشته و در ابزارهای طراحی مانند dream weaver، front page و… قرار داده و به طور مستقل طراحی کنند.

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

قابلیت استفاده مجدد کلاس code behind:

اگر هر پروژه حرفه ای ASP.Net Webform را بررسی کنید، متوجه خواهید شد که کلاس code behind جایی است که تعداد خط کد بسیار زیادی در آن قرار گرفته است و این کد واقعا پیچیده است.

حال این صفحه code behind از کلاس “System.Web.UI.Page” ارث بری می کند.

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

به عبارت دیگر، هرگز نمی توان کاری شبیه به کد زیر برای یک کلاس Webform انجام داد:

WebForm1 obj = new WebForm1();
obj.Button1_Click();

چرا که کلاس “Webform” بدون اشیای “request” و “response” قابلیت نمونه سازی ندارد.

هر جایی که شما رویداد “ButtonClick” را در Webform می بینید، کد آن به شکل زیر خواهد بود.

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

protected void Button1_Click(object sender, EventArgs e)
{
// The logic which you want to reuse and invoke
}

راه حل آن: کنار گذاشتن code behind و کنترل های سرور

تست واحد:

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

راه حل چیست؟

با بررسی ۴ مشکل اصلی ASP.Net Webforms دو متهم اصلی در Webform یعنی “Code Behind” و “Server Controls” شناخته شدند. در نمودار زیر، خلاصه ای از مشکلات و دلایل آنها و همچنین راه حل آنها نشان داده شده است.

 آموزش مقدماتی MVC

راه حل مشکلات ذکر شده، مهاجرت از code behind به کلاس های ساده کتابخانه ای جداگانه و رهایی از کنترل های سرور ASP.Net و نوشتن HTML است.

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

 آموزش مقدماتی MVC

[highlight color=”green”]ASP.Net MVC چگونه مشکلات موجود در Webforms را حل می کند؟[/highlight]

همان طور که گفتیم، code behind ریشه اصلی مشکلات موجود در Webform می باشد.

حال اگر به معماری  webformای که در حال حاضر توسعه دهندگان از آن استفاده می کنند، توجه نمایید اغلب معماری ۳ لایه دارند.

این معماری ۳ لایه از UI ای تشکیل شده که ASPX و CS Code behind دارد.

این UI با کلاس های .Net که می توان به آن لایه میانی گفت، business logic و لایه میانی با لایه دسترسی داده ها ارتباط برقرار می کنند.

چرا MVC

بنابراین، ASP.Net MVC از سه بخش Model، View و Controller تشکیل شده است. منطق code behind در Controller پیاده سازی می شود.

View همان ASPX است که در اینجا HTML خالص است و Model در این جا لایه میانی است. در تصویر بالا می توانید این جایگزینی را مشاهده نمایید.

خب همانطور که متوجه شدید، دو تغییر عمده در MVC اتفاق افتاده است: اول اینکه View، به صورت HTML خالص است و code behind به کلاس های ساده .Net با نام Controller تبدیل شده است.

جریان یک درخواست در MVC به صورت زیر خواهد بود:

گام اول: اولین فراخوانی از controller صورت می گیرد.

گام دوم: با توجه به رویداد، Controller شی ای از نوع Model ایجاد می کند.

سپس Model، لایه دسترسی داده (ADL) را فراخوانی می کند که داده ها را در Model واکشی می کند.

گام سوم: سپس داده ها Model را پر می کند و سپس برای نمایش به View ارسال می شود.

چرا MVC

 

تا اینجا با اجزای مختلف ASP.Net MVC آشنا شدیم، حالا می خواهیم نگاه عمیق تری به هریک از این اجزا داشته باشیم.

پس با Controller شروع می کنیم که مهم ترین قسمت معماری MVC است.

معرفی Controller در ASP.Net MVC:

قبل از توضیح درباره Controller باید در ابتدا با اصطلاح User Interaction logic یا منطق تعامل با کاربر آشنا شوید.

User Interaction logic چیست؟

سناریوی اول:

تا به حال فکر کرده اید، زمانی که کاربر یک URL را در مرورگر خود وارد می کند، چه اتفاقی می افتد؟

چرا MVC

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

 مشکلات Asp.Net WebForms

به عبارت دیگر با ارسال یک درخواست، کلاینت قصد دارد که با سرور ارتباط برقرار نماید.

سرور توانایی برگرداندن پاسخ را دارد، چرا که منطقی برای پاسخ به درخواست های کلاینت در آن نوشته شده است.

اما این منطق دقیقا چه چیزی می تواند باشد؟

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

سناریوی دوم:

همچنین ممکن است پاسخی که از طرف سرور ارسال می شود، HTML Response باشد. HTML Response شامل کنترل های ورودی و دکمه submit می باشد.

 مشکلات Asp.Net WebForms

 

اگر روی دکمه “ذخیره” کلیک کنیم، چه اتفاقی می افتد؟

اگر در پاسخ به درخواست شما کنترل کننده رویدادی وجود داشته باشد، رویداد کلیک مدیریت خواهد شد، در غیر اینصورت هیچ اتفاقی نمی افتد.

زمانی که دکمه کلیک می شود، یک درخواست ساده HTML به سرور ارسال می شود.

مقادیر “نام”، “آدرس”و “سن” همراه این درخواست ارسال می شوند. (در اصطلاح فنی، مقادیر به سرور پست می شوند) درنهایت، اگر درخواستی وجود داشته باشد، باید منطقی در سرور نوشته شده باشد تا سرور بتواند پاسخی برگرداند.

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

در ASP.Net MVC، حرف آخر C همان Controller است که User Interaction logic را مدیریت می کند.

تمرین اول – معرفی Controller با یک “Hello World”

گام ۱: ایجاد یک پروژه ASP.Net MVC 5

گام ۱.۱: ویژوال استودیو را باز کرده و این مسیر را انتخاب می کنیم. File > New > Project

 مشکلات Asp.Net WebForms

 

گام ۱.۲: Web Application را انتخاب کرده، نام مناسب و محل ذخیره سازی را مشخص نموده و Ok می کنیم.

 نینجای MVC

گام ۱.۳: قالب MVC را انتخاب می نماییم.

 نینجای MVC

گام ۱.۴: روی “Change Authentication” کلیک کرده و آن را روی “No Authentication” قرار می دهیم و Ok می کنیم.

 نینجای MVC

گام ۲: ایجاد Controller

گام ۲.۱: در Solution Explorer، روی فولدر Controller راست کلیک کرده و Add > Controller را انتخاب می کنیم.

 آموزش مقدماتی MVC

گام ۲.۲: گزینه “MVC 5 Controller – Empty” را انتخاب کرده و گزینه Add را می زنیم.

 آموزش مقدماتی MVC

گام ۲.۳: نام Controller را “TestController” می گذاریم و گزینه Add را انتخاب می کنیم.

 آموزش مقدماتی MVC

نکته بسیار بسیار مهم در این مرحله این است که کلمه Controller را از آخر نام پاک نکنید، به صورت یک قرارداد نام تمام Controller ها با این کلمه تمام می شوند.

 

گام ۳: ایجاد Action Method

کلاسی که ایجاد کردیم باز می کنیم، متدی با عنوان “Index” در آن به چشم می خورد. آن را پاک کرده و متد Public ای به نام “GetString” مانند زیر ایجاد می کنیم:

public class TestController : Controller
{
    public string GetString()
    {
        return "Hello World. It&amp;rsquo;s time to learn MVC";
    }
}

گام ۴: اجرا و تست برنامه

کلید F5 را فشار دهید. در منوی آدرس “نام Action/نام Controller” را مانند شکل زیر وارد می کنیم. توجه داشته باشید که به جای نام Controller، فقط Test را وارد می کنیم.

 آموزش مقدماتی MVC

پرسش و پاسخ در تمرین اول:

چه رابطه ای بین Test و TestController وجود دارد؟

TestController نام کلاس است در حالی که Test نام Controller ماست. توجه داشته باشید که وقتی نام Controller را در URL وارد می کنید، باید بدون کلمه Controller وارد شود.

در ASP.Net MVC دو چیز بسیار مهم است:

  1. هر چیزی را چگونه نام گذاری می کنیم؟
  2. هر چیزی را کجا قرار می دهیم؟

Action Method چیست؟

Action Method یک متد ساده public درون Controller است که درخواست کاربر را می پذیرد و پاسخی برای آن ارسال می کند. در مثال بالا، متد GetString پاسخی از جنس String برمی گرداند.

نکته: در ASP.Net Webforms نوع پاسخ برگشتی به طور پیش فرض HTML است.

برای اینکه بتوانیم پاسخی به جز HTML ارسال کنیم باید HTTP handler ایجاد کنیم، نوع محتوا را override کرده و پاسخ را ارسال نماییم، که این کار چندان آسانی نیست.

در ASP.Net MVC این کار بسیار آسان است.

اگر نوع داده بازگشتی “String” باشد، به همین سادگی می توانیم یک رشته برگردانیم و نیازی به ارسال کامل HTML نیست.

اگر بخواهیم یک object از طریق action method ارسال کنیم، چه اتفاقی می افتد؟

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

namespace WebApplication1.Controllers
{
    public class Customer
    {
        public string CustomerName { get; set; }
        public string Address { get; set; }
    }
    public class TestController : Controller
    {
        public Customer GetCustomer()
        {
            Customer c = new Customer();
            c.CustomerName = "Customer 1";
            c.Address = "Address1";
            return c;
        }
    }
}  

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

 آموزش مقدماتی MVC

زمانی که نوع داده بازگشتی، شی ای مانند “Customer” است، پیاده سازی “ToString()” آن را برمی گرداند.

به طور پیش فرض، متد ToString() نام کلاس را به طور کامل تعیین می کند که به شکل “نام کلاس.فضای نام” یا “NameSpace.ClassName” می باشد.

اگر بخواهیم مقادیر Property های مثال بالا را دریافت کنیم، چه کار باید بکنیم؟

بسیار ساده است، متد “ToString” کلاس را به شکل زیر override می کنیم.

public override string ToString()
{
     return this.CustomerName+"|"+this.Address;
}

خروجی آن به شکل زیر خواهد بود:

 چرا MVC

آیا action method حتما باید public باشد؟

بله ، به طور خودکار هر متد public به عنوان action method شناخته می شود.

متدهای غیر public چطور؟

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

حال اگر بخواهیم متدی public باشد، اما  action method نباشد چه؟

به سادگی، آن را با attribute (صفت) [NonAction] مشخص می کنیم:

 

[NonAction]
public string SimpleMethod()
{
    return "Hi, I am not action method";
}

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

 چرا MVC

[highlight color=”green”]معرفی View در ASP.Net MVC:[/highlight]

همانطور که قبل از این بحث کردیم، Controller درخواست های کاربر را مدیریت کرده و پاسخ مربوط را ارسال می کند.

اغلب پاسخ ها به صورت HTML هستند که مرورگر بهتر آن را می فهمد.

HTML با چند عکس، متن، کنترل های ورودی و… به طور معمول در برنامه نویسی حرفه ای، یک لایه رابط کاربری به نام UI طراحی می شود و در ASP.Net MVC این رابط View نام دارد.

تمرین دوم: معرفی View

در تمرین اول، یک پروژه MVC با Controller ایجاد کرده و یک رشته ساده به عنوان خروجی برگرداندیم. حال می خواهیم یک  View به پروژه اضافه کنیم.

گام ۱: ایجاد action method جدید

مانند کد زیر، یک action method جدید در TestController ایجاد می کنیم.

گام ۲: ایجاد View

گام ۲.۱: بالای action method راست کلیک کرده و “Add View” را انتخاب می کنیم.

 چرا MVC

 

گام ۲.۲: در پنجره باز شده، نام آن را “MyView” می گذاریم، تیک “Use a layout page” را برمی داریم و گزینه Add را کلیک می کنیم.

 چرا MVC

با این کار، یک View جدید درون فولدر “Views/Test” در Solution Explorer ایجاد می شود.

 نینجای MVC

گام ۳: اضافه کردن محتوا به View

فایل MyView.cshtml را باز کرده و محتوا را به صورت زیر وارد می کنیم:

@{
    Layout = null;
}
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta name="viewport" content="width=device-width" /&gt;
&lt;title&gt;MyView&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
به سری آموزشی گام به گام
&lt;br/&gt;
MVC 5
&lt;br/&gt;
در ۷ روز خوش آمدید
&lt;/body&gt; &lt;/html&gt;
	

گام ۳: اجرا و تست برنامه

کلید F5 را فشار داده و برنامه را اجرا می کنیم.

 نینجای MVC

پرسش و پاسخ در تمرین دوم:

چرا View در فولدر Test قرار می گیرد؟

در ASP.Net MVC، View ها مربوط به یک Controller خاص هستند که در یک فولدر مشخص قرار گرفته است.

این فولدر مشخص به نام Controller می باشد و در فولدر Views قرار دارد (در فولدر ریشه قرار می گیرند) برای هر Controller تنها Viewهایی قابل دسترسی هستند که در فولدر خود قرار گرفته باشند.

برای مثال: تمام Viewهای مربوط به Controller ای به نام Test در “~/Views/Test” قرار می گیرند و Test Controller تنها به View هایی دسترسی دارد که در فولدر Test قرار دارند.

آیا می توانیم بعضی از Viewها را در چندین Controller استفاده کنیم؟

بله، برای این کار این فایل ها را در فولدری به نام “Shared” قرار می دهیم.

 نینجای MVC

Viewهایی که در این فولدر قرار می گیرند، برای تمامی Controller ها قابل دسترسی هستند.

آیا ممکن است یک action method به بیش از یک View ارجاع دهد؟

بله، به کد زیر توجه نمایید:

public ActionResult GetView()
{
    if(Some_Condition_Is_Matching)
    { 
       return View("MyView");
    }
    else
    {
       return View("YourView");
    }
}

نکته: در ASP.Net MVC، Viewها و Controller ها به صورت زوج نیستند.

یک action method می تواند به بیش از یک View ارجاع دهد و یک View می تواند توسط چندین action method فراخوانده شود (با نگه داشتن آنها در فولدر Shared) به این صورت، قابلیت استفاده مجدد راحت تر خواهد بود.

هدف از ایجاد تابع View چیست؟

شی ViewResult را ایجاد می کند که View را برای ارسال پاسخ اجرا می کند.

  • ViewResult به طور داخلی شی ای از ViewPageActivator را ایجاد می کند.
  • ViewResult، ViewEngine مناسب را انتخاب کرده و شی ViewPageActivator را به عنوان آرگومان به سازنده ViewEngine ارسال می کند.
  • ViewEngine شی ای از کلاس View را ایجاد می کند.
  • ViewResult متد RenderView از کلاس View را درخواست می کند.

نکته: تاپیک جداگانه ای در این سری آموزشی درباره چرخه زندگی ASP.Net MVC خواهیم داشت.

چه رابطه ای بین ActionResult و ViewResukt وجود دارد؟

ActionResult یک کلاس abstract است در حالی که ViewResult با چندین سطح اختلاف از ActionResult ارث بری می کند (multilevel child) چرا که ViewResult از ViewResultBase و ViewResultBase از ActionResult ارث بری می کند.

چرا زمانی که می خواهیم ViewResult برگردانیم، ActionResult همان ViewResult است؟

به دلیل استفاده از چندریختی (polymmorphism). به مثال زیر توجه نمایید:

public ActionResult GetView()
{
    if(Some_Condition_Is_Matching)
    { 
       return View("MyView");
    }
    else
    {
       return Content("Hi Welcome");
    }
}

در مثال بالا، اگر شرط اول درست باشد، ما تابع View را فراخوانی کرده و یک ViewResult برمی گردانیم درحالی که اگر شرط بعدی برقرار باشد، تابع content را فراخوانی کرده و Content Result را برمی گردانیم.

ContentResult چیست؟

ViewResult یک پاسخ کامل HTML ارائه می دهد در حالی که ContentResult یک متن را به عنوان پاسخ برمی گرداند و این مانند برگرداندن یک رشته از جنس string است. همچنین ContentResult فرزند ActionResult است و از آن ارث بری می کند.

آیا ممکن است تابع View را بدون پارامتر فراخوانی کرد؟

بله، سپس view با نام “CurrentActionName” را پیدا می کند.

آنچه در جلسه دوم خواهیم داشت:

در جلسه دوم، درباره Model، اعتبارسنجی ، جی کوئری و Json صحبت خواهیم کرد.

تا جلسه بعد، تمرین یادتون نره!

دانلود فایل PDF

فاطمه زکایی

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

نوشته‌های مرتبط

دیدگاه‌ها

*
*

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

    علی پاسخ

    خیلی عالی و روان توضیح داده شده.ممنون

    حمید پاسخ

    سلام
    کارتون عالیه
    فقط اگه پایان هر جلسه فایل pdf یا word رو بزارین عالی میشه

      باران بزرگمهر پاسخ

      ممنون.
      بله ارائه خواهد شد.

      مسعود شریفی پاسخ

      اضافه شد.

    عبداللهی پاسخ

    عالی خانم بزرگمهر

    Saeed.N پاسخ

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

      باران بزرگمهر پاسخ

      خواهش میکنم موفق باشید.

    طالبی پاسخ

    سلام ممنونم خانم بزرگمهر، خیلی خوب توضیح دادین وهمچنین پیوستگی مطالب عالی بود، خدا قوت.

    سمیه پاسخ

    سلام عالی بود ممنون
    آموزش روزهای دیگه هنوز آماده نشده؟

      مسعود شریفی پاسخ

      روی سایت منتشر شدن کافیه نینجای MVC را جستجو کنید.