۱۳۹۱/۰۱/۰۶

ASP.NET MVC #3


تهيه پيش‌نيازهاي شروع به كار با ASP.NET MVC

در زمان نگارش اين مطلب، نگارش نهايي ASP.NET MVC 3 در دسترس است و همچنين نگارش بتاي 4 آن نيز قابل دريافت و نصب مي‌باشد. بنابراين فعلا اساس را بر مبناي نگارشي قرار خواهيم داد كه در محيط كاري قابل استفاده باشد.
ASP.NET MVC 3 پس از ارائه Visual Studio 2010، منتشر شد و VS.NET به صورت پيش فرض به همراه ASP.NET MVC 2 است. ساده‌ترين روش نصب ASP.NET MVC 3 بر روي VS 2010 استفاده از برنامه رايگاني است به نام Web Platform Installer. اين برنامه را از اين آدرس مي‌توان دريافت كرد: http://microsoft.com/web/downloads
پس از دريافت آن حداقل دو راه براي نصب ASP.NET MVC 3 وجود دارد. يا گزينه‌ي نصب ASP.NET MVC 3 Tools Update را انتخاب كنيد و يا سرويس پك يك VS 2010 را از طريق اين برنامه يا جداگانه (بسته كامل و مستقل) دريافت و نصب نمائيد. VS 2010 SP1 نيز به همراه ASP.NET MVC 3 است؛ همچنين IIS Express را كه نسخه ساده شده IIS 7.5 مخصوص توسعه دهنده‌ها است، مي‌توان با اين نگارش يكپارچه كرد.


بنابراين به صورت خلاصه بهترين كار اين است كه سرويس پك يك VS 2010 را يكبار نصب نمائيد. اگر اين نصب از طريق برنامه Web Platform Installer باشد، به صورت خودكار IIS Express را هم انتخاب و نصب خواهد كرد. اگر فقط SP1 را به صورت مستقل دريافت كرده‌ايد، حاوي IIS Express نيست و بايد جداگانه آن‌را دريافت و نصب نمائيد (^). البته نصب IIS Express در اينجا يك گزينه اختياري است و الزامي نيست.



مروري بر ساختار يك پروژه ASP.NET MVC

پس از نصب پيش نيازها، امكان انتخاب يك پروژه وب ASP.NET MVC 3 در VS 2010 ميسر خواهد شد:


در اينجا گزينه‌ي ASP.NET MVC 3 Web Application را انتخاب مي‌كنيم. در صفحه بعدي كه ظاهر مي‌شود:


حالت Internet Application به همراه يك سري مدل و كنترلر از پيش نوشته شده جهت مديريت ورود به سايت و ثبت نام در سايت است و حالت Empty تنها به همراه ساختار پيش فرض پوشه‌هاي يك پروژه ASP.NET MVC است.
فعلا جهت توضيحات اوليه بيشتر، گزينه‌ي Internet Application و نوع View Engine را هم ASPX انتخاب مي‌كنيم. كار View Engine، رندر يك View به شكل HTML و ارائه نهايي اطلاعات آن به كاربر است. اين نوع‌هاي متفاوت هم فقط در Syntax تفاوت دارند (به آن templating language هم گفته مي‌شود). نوع ASPX همان Syntax متداول قديمي ASP.NET را تداعي مي‌كند و نوع Razor به صورت اختصاصي براي ASP.NET MVC تهيه شده است.
بايد در نظر داشت كه گزينه مرجح از نگارش 3 به بعد، Razor است (البته اين هم سليقه‌اي است. اگر هيچكدام از اين دو را هم نخواهيد استفاده كنيد مشكلي نيست! مي‌شود كلا آن را عوض كرد). هدفم هم از انتخاب ASPX نمايش يك سري ريزه كاري است كه شايد براي برنامه نويس‌هاي ASP.NET Web forms جالب باشد. اين موارد را در حالت انتخاب Razor به اين وضوح مشاهده نخواهيد كرد و محيط خيلي ساده شده است.


همانطور كه ملاحظه مي‌كنيد اين فريم ورك يك سري پوشه پيش فرض را توصيه مي‌كند. بديهي است كه ضرورتي ندارد تا پوشه Models يا پوشه Controllers حتما در همين پروژه قرار داشته باشند؛ چون زمانيكه پروژه كامپايل شد، محل اين پوشه بندي‌ها آنچنان اهميتي ندارد.
نكته جالب در اين تصوير، فايل Site.Master است. بله، اين فايل شبيه به همان فايل master page موجود در ASP.NET Web form است كه قالب كلي سايت را به همراه داشته و ساير صفحات، قالب خود را از آن به ارث مي‌برند. حتي ويژگي runat=server هم به وضوح در اين فايل، در چندين جاي آن قابل مشاهده است. تنها تفاوت آن نداشتن فايل code behind است. asp:ContentPlaceHolder نيز در آن تعريف شده است. خلاصه اين محيط جديد به معناي دور ريختن تمام آنچيزي كه در Web forms وجود دارد نيست. براي نمونه اگر فايل ChangePassword.aspx موجود در پوشه Account را باز كنيد، باز هم همان asp:Content معروف به همراه ويژگي runat=server قابل مشاهده است. براي مثال اين محتواي صفحه Error.aspx پيش فرض آن است:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
 Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %>

<asp:Content ID="errorTitle" ContentPlaceHolderID="TitleContent" runat="server">
    Error
</asp:Content>

<asp:Content ID="errorContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        Sorry, an error occurred while processing your request.
    </h2>
</asp:Content>

اگر از قسمت Inherits آن صرفنظر كنيم، «هيچ» تفاوتي با ASP.NET Web forms ندارد؛ علت هم به اين بر مي‌گردد كه موتوري كه Web forms و MVC از آن استفاده مي‌كنند، يكي است. هر دو بر فراز موتور ASP.NET معنا پيدا خواهند كرد.


قرار دادهاي پوشه‌هاي پيش فرض يك پروژه ASP.NET MVC

  • پوشه Controllers حاوي كلاس‌هاي كنترلري است كه درخواست‌هاي رسيده را مديريت مي‌كنند.
  • پوشه Models حاوي كلاس‌هايي است كه اشياء تجاري و همچنين كار با اطلاعات را تعريف و مديريت مي‌كنند.
  • در پوشه Views، فايل‌هاي قالب‌هاي رابط كاربري كه مسئول ارائه خروجي به كاربر هستند قرار مي‌گيرند. همچنين مطابق قرارداد ديگري، اگر نام كنترلر ما مثلا ProductController باشد (با توجه به اينكه نام كلاس آن هم مطابق قرارداد، مختوم به كلمه Controller است)، فايل‌هاي Viewهاي مرتبط با آن در پوشه Views/Product قرار خواهند گرفت.
  • در پوشه Scripts،‌ فايل‌هاي جاوا اسكريپت مورد استفاده در سايت قرار خواهند گرفت.
  • پوشه Content محل قرارگيري فايل‌هاي CSS و تصاوير است.
  • پوشه App_Data جايي است كه فايل‌هايي با قابليت read/write در آن قرار مي‌گيرند (و بايد دقت داشت كه فقط همينجا هم بايد قرار گيرند و گرنه اين نوشتن‌ها در مكان‌هاي متفرقه، ممكن است سبب ري استارت شدن برنامه شوند:(^)).