آموزش MVC - قسمت دوم
  این مقاله دومین مقاله از سری آموزش MVC می باشد
   ASP.NET MVC
   ۲۶۰۵۲
   دانلود
   امیر مددی
   ۱۳۸۹/۱۲/۲۰
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

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

- چرخه کار MVC :

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

  1.  یک درخواست از طرف کاربر ( کلاینت ) به سرو ارسال می شود (مثل مشاهده یک صفحه یا یک رویداد خاص مثل Button_click)
  2. بخشی از MVC که به آن موتور مسیر یاب ( Routing Engine ) می گویند، کنترلر متناسب با آن درخواست را پیدا می کند .
  3. اکشن متناسب با درخواست اجرا ( Invoke ) می شود و در صورت لزوم داده ها را از Model مناسب می خواند.
  4.  View متناسب با اکشن ، به همراه داده های خوانده شده از Model به سمت کاربر ارسال می شود .

پس به زبان ساده تر :

اگر قصد دارید در برنامه خود رویدادی مثل Button_Click  را فراخوانی کنید ، باید اول در کنترلر خود ، اکشنی را برای آن ایجاد کنید که این اکشن ممکن است داده ها را از کلاس ها یا از Model مربوطه بخواند. سپس برای این اکشن یک صفحه ( View ) مناسب ایجاد کنید. برای هر رویداد دیگری باید همین مراحل را تکرار کنید، یعنی صفحه ای که مثلا 5 دکمه دارد، باید یک کنترلر که درون آن 5 اکشن است و 5 view متناظر با آن داشته باشد و این به شما کمک می کند تا صفحات اختصاصی  ، کاراتر و خلوت تری داشته باشید.

 برای اینکه قالبی که Routing Engine از آن استفاده می کند را ببینید ، فایل Global.asax.cs را از درون Solution Explorer خود باز کنید و به بخش RegisterRoutes آن توجه نمایید. قالب URL  و اینکه کدام پارامترها اختیاری ( Optional ) هستند ( در اینجا id ) مشخص شده است :

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

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

}

اما مثالهای عملی :

مثال اول: در این مثال ، چند اکشن مختلف با پارامتر و بدون پارامتر آورده شده تا تاثیر آن را در URL صفحه ببینید. در این مثال چون خروجی اکشن ها از نوع string است نیازی  به ساختن View نیست . برای اینکار با کلیک راست روی فولدر Controller یک کنترلر جدید به نام SecondController ایجاد کنید : 

سپس در این کنترلر ، سه اکشن زیر را ایجاد کنید :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace _30Sharp_com_MVC.Controllers
{
    public class SecondController : Controller
    {
        //          // GET: /Second/
        public string Index()
        {
            string message = "hello !";
            return Server.HtmlEncode(message);
        }
        public string testAction(string id)
        {
            string message = "Hello " + id;
            return Server.HtmlEncode(message);
        }
        public string SayHello(string name)
        {
            string message = "Say hello to: " + name + " " + Server.HtmlEncode(Request.QueryString["family"]);
            return Server.HtmlEncode(message);
        }
    }
}

در هنگام نوشتن اکشن ها به خروجی اکشن و پارامترهای آن توجه کنید. در اکشن Index فقط یک متن ساده نوشته شده است. در اکشن دوم، متغیر id از ورودی خوانده می شود و به همراه پیام نمایش داده می شود . در اکشن سوم علاوه بر متغیر name متغیر دیگری از طریق QueryString خوانده می شود.

 در اینجا چون خروجی یک رشته ساده است ، View برای آن تعریف نمی کنیم و خروجی آن را از طریق خط آدرس URL مشاهده می کنیم ( به ترتیب خروجی اکشن اول تا سوم )

( فالب آدرس را که فراموش نکرده اید : ControllerName/ActionName/Parameter )

نکته : در این مورد چون نام اکشن Index است ( پیش فرض ) ، نیازی به تایپ آن نیست

مثال 2 : در این مثال چگونگی انتقال یک list از نوع string را به View ( خروجی ) خواهیم دید. برای این کار ابتدا مانند مثال قبل یک Controller جدید به نام ThirdCintroller ایجاد کنید و درون آن لیستی از نوع string ایجاد کنید و مقدار دهی کنید :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace _30Sharp_com_MVC.Controllers
{
    public class ThirdController : Controller
    {
        //          // GET: /Third/  
  
        public ActionResult Index()
        {
            List<string> StudentName = new List<string> { "Houman", "Amir", "Neda" };
            ViewData["SName"] = StudentName.ToList();
            return View();
        }
    }
}

سپس برای آن یک View جدید ایجاد کنید ، یعنی روی نام اکشن ( Index ) کلیک راست کنید و Add view را انتخاب و گزینه های پیش فرض را بپذیرید :

سپس در صفحه ایحاد شده ، کد زیر را وارد کنید :

<asp:content id="Content2" contentplaceholderid="MainContent" runat="server">
        <h2>Index</h2>
              <% foreach (var s in (IEnumerable)ViewData["Sname"]) { %>
                    <%: s%>
                    <br />  
              <% } %>  
</asp:content>

همانگونه که مشاهده می کنید ، در کد فوق ، یک حلقه foreach وجود دارد که لیست ذخیره شده در متغیر Sname را می خواند ، آن را به نوع IEnumerable تبدیل می کند و چاپش می کند .

توضیح اینکه علامت :%> را وفتی بکار می بریم که بخواهیم مقداری را چاپ کنیم ( در اینجا مقدار s ) . خروجی بصورت زیر خواهد بود :

3- خب برای تمرین مطالب بیان شده ، مثال بعدی را خودتان بنویسید . سعی کنید در یک کنترلر جدید ، با مقدار دادن به یک متغیر از نوع list در هنگام چاپ ، طول رشته را هم چاپ کنید .

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

 لطفا برای ارتقای کیفی این سری از مقالات ، نظرات خود را ارسال فرمایید.

سورس کامل مقاله را می توانید از لینک بالای صفحه دانلود کنید. ( شامل مقاله اول و دوم )