مقاله ام وی سی _سطوح مقدماتی و متوسط (قسمت اول)

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

مقدمه

با سلام خدمت تک تک دانشجویان محترم و کاربران عزیز وبسایت طلوع

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

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

معرفی و ورود

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

MVC , MVP , MVBM

قابلیت پیشرفت سریع و توسعه و همچنین توجه بسیاری از برنامه نویسان به ام وی سی موجب گردیده تا این فریم ورک از الگوهای معماری دیگر همچون ام وی پی که شکلی تغییر یافته از الگوی معماری سنتی و تمایل به مدرن بودن ارائه میکند و ام وی بی ام که در دسک تاپ اپلیکیشن های قدرتمند مثل دبلیو پی اف کاربرد دارد _ پیشی بگیرد.

ASP.NET MVC , JAVA , PHP

برخلاف ذهنیت برخی از افرادی که به تازگی با ام وی سی برخورد میکنند این نکته قابل توجه است که پیش از مایکروسافت ام وی سی توسط تکنولوژی های دیگر همچون جاوا در شرکت سان و پی اچ پی به شکلی موفق ارائه گردیده است.

مزایای یادگیری ام وی سی

  • قابلیت توسعه و پیاده سازی بخش زیادی از افزونه ها توسط بسته های ناگت و دیگر تکنولوژی ها _ محدوده فعالیت برنامه نویس را در عین سادگی توسعه میبخشد که از این جمله میتوان به صد ها بسته آماده و رایگان ناگت در سایت ناگت گالری و نیز به پیاده سازی پترن ریپازیتوری و یونیت آف ورک اشاره کرد.
  • در ام وی سی میتوان از یونیت تستینگ یا هماه آزمایش همزمان پروژه بهره برد.
  • یکی از علاقمندی های برنامه نویسان علی الخصوص برنامه نویسان تحت وب این هست که بتوانند به سرعت و سهولت در کمترین زمان ممکن موادی که مورد نیاز پروژه هست را در پروژه پیاده سازی نمایند که از یکی دیگر از ویژگیهای ام وی سی انجام موفق این خواسته برنامه نویسان میباشد
  • ام وی سی نسبت به وب فرم نیز مزایای فراوانی دارد که از حوصله این مقاله خارج است که این امر در آن اندازه است که وب فرم علیرغم قدرت و توجه فراوان بتدریج اهمیت و کاربری خود را از دست داده است.نسخه های ای اس پی دات نت ام وی سی نشخه 1 تا 6 ام وی سی از سال 87 تا 96 (زمان حاضر ) توسط شرکت مایکروسافت ارائه گردیده است که نسخه ی 1به 2 و 2 به 3 بدلیل ساختار بندی و بهینه سازی تفاوت های زیادی با هم داشتند از نسخه ی 3 به 4 با تثبیت موتور ریزور بهینه سازی های مثبتی نسبت به نسخه 3 صورت پذیرفته است.مایکروسافت از نسخه ی 4 تا 6 تمهیدات زیادی را در جهت توسعه و پیاده سازی پیشرفته تر صورت به شکلی موفق صورت داده است که تفکر این پیشرفت حاصل ایجاد فریم ورک جدید مایکروسافت بنام ای اس پی دات نت هسته میباشد .مدل رازور مدل تثبیت شده در ام وی سی است ولی میتوان از انجین ای اس پی ایکس نیز استفاده کرد که اصلا پیشنهاد نمی شود و در ام وی سی 5 و 6 اصلا پشتیبانی نمی شود.

ASP.NET MVC --- ASP.NET CORE

لازم به ذکر است ام وی سی پیشنیاز ترجیحی برای یادپیری ای اس پی دات نت هسته میباشد.

 

پیش نیازهای لازم برای آشنایی با ام وی سی عبارت اند از:

  • زبان برنامه نویسی سی شارپ (حداقل آشنائی : سطح مقدماتی )
  • آشنایی با اچ تی ام ال (حداقل آشنائی : سطح مقدماتی )
  • سی اس اس (حداقل آشنائی : سطح مقدماتی )

 

پیش نیازهای نرم افزاری موردنیاز برای کار با ام وی سی:

  • ویژوال استدیو (ترجیحا آخرین نسخه)
  •  اس کیو ال سرور اکسپرس (ترجیحا آخرین نسخه)

پیشنهاد :

پیشنهاد ما برای شروع به برنامه نویسی تحت وب چه اینکه مبتدی باشید و یا با تکنولوژی ای اس پی دات نت وب فرم مایکروسافت کار کرده باشید _ ای اس پی دات نت ام وی سی میباشد.

مراحل ایجاد یک پروژه جدید:

بعد از بازنمودن ویژوال استدیو نیو پراجکت را از منو انتخاب نموده روی زبانه وب کلیک می کنیم و ای اس پی دات نت وب اپلیکیشن را انتخاب می نماییم و نام پروژه را وارد می کنیم در صفحه نیو ای اس پی دات نت پروژکت روی گزینه امپتی کلیک می نماییم و بعد تیک ام وی سی را انتخاب مینمائیم بعد از ایجاد پروژه در سولوشن اکسپلورر شاهد اجزای ذیل خواهیم بود:

Properties

 References

 App_Data

  App_Start

 Controllers

Models

  Views

Global.asax 

Packages.config

Web.config

توضیح اختصاری اجزای پروژه :

  • کنترلر یک کلاس است و داخل آن متدهایی به نام اکشن وجود دارد اکشن ها همان توابع یا متدهای پابلیک در ام وی سی هستند.
  • مدل شامل کلاس هایی هست که در تعامل با بانک اطلاعات هستند.
  • در ویو فایل هایی با پسوند سی اچ تی ام ال قرار دارد که امکان نوشتن همزمان کدهای سی شارپ . اچ تی ام ال را بهمراه اچ تی ام ال هلپر های مفید به شما میدهد.
  • آیتم های دیگر درریشه همچون فایل گلوبال .ای اس ای ایکس جهت اعمال برخی تنظیمات برنامه - ریفرسن شامل دی ال ال و یا ناگت های برنامه - فولدر ای پی پی استارت شامل چندین فایل برای کنترل و تنظیمات برخی از اجزای پروژه – پکیج دات کانفیگ شامل اطلاعاتی در خصوص بسته های نصب شده در پروژه – پراپرتیز شامل جزئیات پروژه – فولدر ای پی پی دیتا شامل بانک اطلاعاتی ایجاد شده پیش فرض توسط لوکال دی بی و یا فایل های دیگر مورد نظر برنامه نویس شامل قالب های رایانامه و ... – و فایل وب دات کانفیگ شامل تنظیمات کلی پروژه میباشند.

بخش اول : کنترلر

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

 

حالت های مختلف ارسال و دریافت در خواست در ام وی سی :

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

 

نکته :حالت دوم خود شامل 3 حالت می باشد:

  • تک پارامتر
  • چند پارامتر
  • ویو مدل

نکته :حالت چهارم حالت اصلی و پیش فرض می باشد.

 

مراحل ایجاد کردن یک کنترلر:

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

;Using System

;Using System.Collections.Generic

;Using System.Linq

;Using System.web

;Using System.Web.Mvc

 

Namespace webApplication1.controllers

}

Public class HomeController: Controller

}

()Public ActionResult Index

}

;()Return view

{

{

{

بحث داکیومنت کردن در ام وی سی :

برای گذاشتن توضیحات در ام وی سی از کد زیر استفاده می نماییم

 

<summary>///

…///

…///

…///

<summary/>///

یک مثال از حالت صفر در ام وی سی :

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

Public class HomeController:Controller

}

()Public void Session00

}

;int intA=1

;int intB=120

;int intC=intA+intB

{

{

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

چند مثال از حالت اول  در ام وی سی :

حالت اول:کاربر به کنترلر درخواست میدهد_کنترلر پردازش می کند و نتیجه را به کاربر برمی گرداند.

مثال 1:

()Public string Session01

}

;("Return (“Hello world

{

متد از جنس استرینگ می باشد یعنی یک مقدار از جنس استرینگ را بر می گرداند.

مثال 2:

()Public ActionResult Session01_00

}

;(("Return (Content(“Hello World

{

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

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

مثال 3: در این مثال از تگ اچ تی ام ال استفاده کرده ایم

 

()Public ActionResult Session01_01

}

;(("<Return (Content(“<b>Hello World!</b

{

مثال 4: این مثال زمان را توسط اکشن ریزالت برمی گرداند

()Public ActionResult Session01_02

}

;((("Return (Content(Datetime.Now.ToString(“yyyy/MM/dd-HH:mm:ss

{

مثال 5:این مثال به دلیل پرایویت بودن اصلا اجرا نمی شود اولین شرط اکشن بودن پابلیک بودن است

()Private ActionResult Session01_03

}

;((("Return (Content(Datetime.Now.ToString(“yyyy/MM/dd-HH:mm:ss

{

مثال 6: این مثال به دلیل اتریبیوت نو اکشن اجرا نمی شود دومین شرط اکشن بودن این است که اتریبیوت نو اکشن را نداشته باشد

[NonAction]

()Public  ActionResult Session01_04

}

;((("Return (Content(Datetime.Now.ToString(“yyyy/MM/dd-HH:mm:ss

{

مثال 7: این مثال به دلیل اتریبیوت اکشن نیم با نام داده شده (مای اکشن نیم )اجرا می گردد

[ActionName(“MyActionName”)]

()Public  ActionResult Session01_05

}

;((("Return (Content(Datetime.Now.ToString(“yyyy/MM/dd-HH:mm:ss

{

مثال 8:در این اکشن نام کنترل جاری-نام اکشن جاری و آی دی ارسالی را خواهیم دید

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

آدرس دهی پیش فرض نام کنترلر و نام اکشن را در فولدر ای پی پی استارت و فایل روت کانفیگ می توان دید.

()Public  ActionResult Session01_06

}

;String strContent =string.Empty

=+StrContent

;(["string.Format(“|Controller :{0}”,RouteData.Values[“controller

=+StrContent

;(["string.Format(“|Action :{0}”,RouteData.Values[“action

=+StrContent

;(string.Format(“|id :{0}”,RouteData.Values[“id”]

;((return (Content(strContent

{

مثال 9:در این اکشن حتما باید پارامتری از جنس اینتیجر به عنوان آی دی داشته باشد

Public  ActionResult Session01_07(int id)

}

;()string strContent=id.ToString

;return(content(strContent))

{

مثال 10:این اکشن باید پارامتری اینتیجر به عنوان آی دی داشته باشد اگر نداشته باشد پیغام مناسب داده نمی شود وقتی از علامت سوال بعد از نوع استفاده می کنیم آن متغیر دارای پراپرتی هز ولیو می شود

Public  ActionResult Session01_08(int? id)

}

;string strContent=string.Empty

if (id.HasValue)

}

;()strContent=id.Value.ToString

{

Else

}

;”strContent=”ID HAS A NULL Value

{

;return(content(strContent))

{

مثال 11:این اکشن باید پارامتری استیرینگ به عنوان آی دی داشته باشد اگر نداشته باشد پیغام مناسب داده نمی شود

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

public ActionResult Session01_09(string name)

}

;string strContent = string.Empty

if (name == null)

}

;“strContent = “Name Has A Null Value

{

else

}

=strContent

;string.Format(“<b>{0}</b>”, name)

{

;return (Content(strContent))

{

مثال 12 :می توان مقدار ورودی استرینگ را انکد نیز نمود در این حالت تگ ها عمل نمی کنند فقط نمایش داده می شوند

public Action Result Session01_10(string name)

}

=name

;string.Format("<b>{0}</b>", name)

=string strContent

;Server.HtmlEncode(name)

;return (Content(strContent))

{

مثال 13 :در این مثال اگر مقدار نام داده نشود ستاره درنظر گرفته می شود

publicAction Result Session01_11(string name = "*")

}

=string strContent

;Server.HtmlEncode(name)

;return (Content(strContent))

{

 

مثال 14:ریدایرکت نمودن اکشن ها

publicAction Result Session01_12(int id)

}

switch (id)

}

:case 121

}

Old Solution//

Response.Redirect("~/Home/Action1", endResponse: false)

;return (null)//

Old Solution//

New Solution//

;return (RedirectToAction(actionName: "Action1"))

New Solution///

{

:case 122

}

اگر بخواهیم به اکشنی در همین کنترلر برویم//

;return (RedirectToAction(actionName: "Action2"))//

اگر بخواهیم به اکشنی در کنترلر دیگری برویم//

return (RedirectToAction(actionName: "Action2", controllerName: "Home"))

{

:default

}

=string strContent

;"ID Value Is Not Valid "

;return (Content(strContent))

{

{

{

تعریف دو اکشن آزمایشی برای اجرای اکشن  12_01//

()publicAction Result Action1

}

=string strContent

;"Action (1)"

;return (Content(strContent))

{

()publicAction Result Action2

}

=string strContent

;"Action (2)"

;return (Content(strContent))

{

مثال 15:ریدایرکت پرمننت با ریدایرکت تو اکشن از نظر سرچ انجین فرق میکند

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

()public Action Result Session01_13

}

;return (RedirectPermanent(url: "Action1"))

آدرس دهی مطلق:

;return (RedirectPermanent(url: "Home/Action1"))//

آدرس دهی  نسبی:

;return (RedirectPermanent(url: "~/Home/Action1"))//

;return (RedirectPermanent(url: "http://www.CNN.com"))//

{

مثال 16:بمنظور دانلود محافظت شده فایل را در ای پی پی دیتا قرار می دهیم

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

نیاز است در دو مرحله مرورگر را دور زد

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

یعنی ابتدا به مرورگر می گویید که این فایل اچ تی ام ال نیست که باعث میشود پنجره دانلود ظاهر شود و در ثانی باید نام فایل دانلود دات ای اس پی نیست بلکه نام دیگری است

این کار را با ارسال تو پک فیک به مرورگر ارسال میکنیم

این مبحث در وب فرم نیز مشترک است

public Action Result Session01_14(int id)

}

مسیر یک فایل در پروژه//

"string strRootRelativePathName = "~/App_Data/Files/SampleSite.css

تبدیل مسیر نسبی به فیزیکی//

=string strPathName

;Server.MapPath(strRootRelativePathName)

switch (id)

}

چون می شناسد در خود مرورگر نمایش د اده میشود//

:case 1

}

;return (File(strPathName, contentType: "text/css"))

{

در این حالت ماهیت را نمی شناسد پنجره سیو ظاهر می شود ولی نام فایل نام اکشن است//

:case 2

}

;return (File(strPathName, contentType: "Harchi/Harchi"))

{

در این حالت ماهیت را نمی شناسد پنجره سیو ظاهر می شود و نام فایل هم همان نام فایل سی اس اس  است//

:case 3

}

,"return (File(strPathName, contentType:" Harchi/Harchi

;(("fileDownloadName: "StyleSheet.css

{

:default

}

;return (Content("Not Valid Parameter !"))

{

{

{

مثال 17:پارامترهایی که بصورت ای جکس از سرور به کلاینت و از کلاینت به سرور ارسال میشود باید فرمت جیسون داشته باشد

Public Action Result Session01_15 (stringfull Name)

       }

,Return (Jason (new{Full Name = full Name, Age = 42}

;((JsonRequestBehavior.AllowGet

دستورات معادل بافرمت جیسون//

;return (Content("{'FullName':'داریوش تصدیقی','Age':42}"))//

return (Content("{\"FullName\":\"داریوش تصدیقی\",\"Age\":42}"))

{

مثال 18:وقتی شما آدرس یک صفحه را در آدرس بار بنویسید و اینتر بزنید و یا یک لینک داشته باشید که کلیک کنید ارسال درخواست شما به روش گت هست

اگر در صفحه یک فرم داشته باشید که آن فرم قراره داده ها را ارسال کند ارسال درخواست به روش پست هست

در این اکشن از گت استفاده کردیم اگر هم ننویسیم به صورت پیش فرض همین است

[HttpGet]

()public ActionResult Session01_16

}

;return (Content("Hello World!"))

{

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

 

[HttpPost]

()public ActionResult Session01_17

}

;return (Content("Hello World!"))

{

مثال 20:حالت ترکیبی گت و پست باهم جواب نمی دهد

[HttpPost]

[HttpGet]

()public ActionResult Session01_18

}

;return (Content(“Hello World!”))

{

مثال 21:اگر دوتا اکشن همنام داشته باشیم یکی از روش ها این است که یکی از آنها گت باشه و اونیکی پست و یا اتریبیوت اکشن نیم آنها متفاوت باشد در حالت اول دو اورلود و در حالت دوم به هر تعداد می توان اورلود ایجاد کرد

 

()public ActionResult Session01_19

}

;return (RedirectToAction(actionName: "Error"))

{

[System.Web.Mvc.HttpGet]

()publicActionResult Error

}

;return (Content("Hello World!"))

{

[System.Web.Mvc.HttpPost]

public ActionResult Error(string name)

}

;return (Content("Hello World!"))

{

مثال 22:اگر دوتا اکشن همنام داشته باشیم یکی از روش ها این است که یکی از آنها گت باشه و اونیکی پست و یا اتریبیوت اکشن نیم آنها متفاوت باشد در حالت اول دو اورلود و در حالت دوم به هر تعداد می توان اورلود ایجاد کرد

 

()publicActionResult Session01_20

}

;return (RedirectToAction(actionName: "OK1"))//

;return (RedirectToAction(actionName: "OK2"))

;return (RedirectToAction(actionName: "OK3"))//

{

[HttpGet]

[ActionName("OK1")]

()publicActionResult OK

}

;return (Content("Hello OK1!"))

{

[HttpGet]

[ActionName("OK2")]

publicActionResult OK(string firstName)

}

;return (Content("Hello OK2!"))

{

[HttpGet]

[ActionName("OK3")]

public ActionResult OK(string firstName, string lastName)

}

;return (Content("Hello OK3!"))

{

مثال 23:به مدت ده ثانیه طول می کشد و در این مدت یک نتیجه نمایش داده می شود

[OutputCache(Duration = 10)]

()public ActionResult Session01_21

}

=string strContent

;System.DateTime.Now.ToString("yyyy/MM/dd - HH:mm:ss")

;return (Content(strContent))

{

مثال 24:کاربری که لاگین نموده است می تواند این اکشن را ببیند

[Authorize]

[Authorize(Users="Amir,Chabok")]//

[Authorize(Roles="Admin,Manager")]//

()public ActionResult Session01_22

}

;return (Content("Hello World!"))

{

 

حالت دوم:کاربر به کنترلر درخواست میدهد_کنترلر درخواست را به ویو میدهد _ویو نتیجه را به کاربر میدهد.

این اکشن در هنگام ساخت کنترلر به صورت پیش فرض ایجاد می شود

این اکشن یک درخواست را از کاربر می گیرد و ویو برمی گرداند

View:

مراحل ایجاد کردن ویو:

راه اول:روی فولدر ویو راست کلیک می کنیم و گزینه ادد ویو را کلیک می نماییم

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

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

ویو به صورت اچ تی ام ال می باشد.

نمونه خام یک ویو:

}@

;Layout=null

{

<!DOCTYPE html>

<html>

<head>

</"meta name=”viewport” content=”width=device-width>

<title>index_01</title>

<head/>

<body>

<div>

<h3>

!Hello World

<h3/>

<div/>

<body/>

<html/>

مثال 1:

()public ActionResult Index

}

;()return View

{

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

}@

;Layout = null

}

<!DOCTYPEhtml>

<html>

<head>

</"meta name="viewport" content="width=device-width>

<title>Index</title>

<head/>

<body>

<div>

<h3>

!(0)Hello World

<h3/>

@*بین اچ تی ام ال کدهای سی شارپ مینویسیم با استفاده از کاراکتر اتساین*@

@*Session02_00*@

}@

for (int intIndex = 1; intIndex <= 7; intIndex++)

}

<h3>

Hello World (@intIndex)

<h3/>

{

{

<div/>

<body/>

<html/>

مثال 2:معمولا نام اکشن و نام ویو یکی است مثل قبل روی نام اکشن راست کلیک می کنیم و اد ویو را کلیک می کنیم تمامی ویوها در این صفحه در فولدر ویو ایجاد می شود.

()public ActionResult Session02_01

}

;return (View())

{

روی سشن 01_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<DOCTYPEhtml!>

<html>

<head>

</"metaname="viewport"content="width=device-width>

<title>Session02_01</title>

<head/>

<body>

<div>

@*بین اچ تی ام ال کدهای سی شارپ مینویسیم با استفاده از کاراکتر اتساین*@

@*باید دقت داشته باشید که دستور مربوطه به اتساین چسبیده باشد*@

@*Session02_01*@

for (int intIndex = 1; intIndex <= 7; intIndex++)@

}

intIndex@

{

<div/>

<body/>

<html/>

مثال 3:

()public ActionResult Session02_02

}

;return (View())

{

 

روی سشن 02_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<DOCTYPEhtml!>

<html>

<head>

</"metaname="viewport"content="width=device-width>

<title>Session02_02</title>

<head/>

<body>

<div>

@*بین اچ تی ام ال کدهای سی شارپ مینویسیم با استفاده از کاراکتر اتساین *@

@*باید دقت داشته باشید که دستور مربوطه به اتساین چسبیده باشد *@

@*Session02_02*@

for (int intIndex = 1; intIndex <= 7; intIndex++)@

}

<h3>

!Hello Wrold (@intIndex)

<h3/>

{

<div/>

<body/>

<html/>

مثال 4:

()public ActionResult Session02_03

}

;return (View())

{

روی سشن 03_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<DOCTYPEhtml!>

<html>

<head>

</"metaname="viewport"content="width=device-width>

<title>Session02_03</title>

<head/>

<body>

<div>

@*اگر بخواهیم از کاراکتر اتساین استفاده کنیم باید از دو کاراکتر اتساین استفاده نماییم*@

@*Session02_03*@

My email address is Chabok.121@GMail.com

</br>

</br>

SomeText@@

Show Detailed Compiler Output

:Show Complete Compilation Source

<div/>

<body/>

<html/>

 

مثال 5:

()publicActionResult Session02_04

}

;return (View())

{

روی سشن 04_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<DOCTYPE html!>

<html>

<head>

</"metaname="viewport"content="width=device-width>

<title>Session02_04</title>

<head/>

<body>

<div>

@*بخواهیم یک بدنه از کد سی شارپ داشته باشیم از اتساین آکولاد بازوبسته استفاده مینماییماگر *@

@*در این حالت متغیرهایی که در داخل بدنه اتساین ایجاد میشوند در بیرون از بدنه نیز قابل دسترس خواهند بود*@

@*هنگامی که خروجی یک متغیری را نمی دانیم و یا به صورت ران تایم یک مقدار در یک متغیر مینشیند از متغیر جنس ور استفاده می کنیم در این صورت اولین جنسی که ایم متغیر میگیرداز همان جنس خواهد شد*@

@*می توان از متغیر جنس آبجکت نیز استفاده نمود اما در این حالت اینتلیسنس را از دست میدهید*@

@*Session02_04*@

}@

Learning Var (Variant) Variable//

;"var varFullName = "Dariush Tasdighi

;()varFullName = varFullName.ToLower

{

varFullName value is: @varFullName

<div/>

<body/>

<html/>

مثال 6:

()public ActionResult Session02_05

}

;return (View())

{

 روی سشن 05_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

    ;Layout = null

{

<DOCTYPE html!>

<html>

<head>

</"metaname="viewport"content="width=device-width>

<title>Session02_05</title>

<head/>

<body>

<div>

@*اگر بخواهیم از کد سی شارپ قبل از نقطه و پسوند فایل استفاده نماییم حتما باید داخل پرانتز باشد*@

@*Session02_05*@

}@

;"string strFirstName = "121

{

<div/>

<body/>

<html/>

مثال 7:در این مثال از آدرس دهی استفاده کرده ایم

()publicActionResult Session02_06

}

;return (View())

{

روی سشن 06_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<DOCTYPE html!>

<html>

<head>

</"metaname="viewport"content="width=device-width>

<title>Session02_06</title>

<head/>

<body>

<div>

@* معادل دستور ارزشمند که آدرس نسبی نسبت به روت را میگیرد و آدرس محلی  که الان هستید را برمی گرداند دستور یو آر ال دات کانتنت هست *@

@*Session02_06*@

}@

;"string strName = "121

=string strFileName

;string.Format("{0}.jpg", strName)

=string strRootRelativePathName

;string.Format("~/Content/Images/{0}", strFileName)

=string strCurrentRelativePathName

;Url.Content(strRootRelativePathName)

{

<img src="//www.tolooco.com/%40strCurrentRelativePathName"alt="@strName>

<div/>

<body/>

<html/>

مثال 8:

()publicActionResult Session02_07

}

;return (View())

{

 روی سشن 07_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<DOCTYPE html!>

<html>

<head>

</"metaname="viewport"content="width=device-width>

<title>Session02_07</title>

<head/>

<body>

<div>

@You can easily write some HTML tag(s) in code block @

@*Session02_06*@

}@

;"string strFirstName = "121

if (strFirstName.StartsWith("1"))

}

;Response.Write("<div>The name starts with \"1\" character!")

{

else

}

<div>

!The name does not start with "1" character

<div/>

{

{

<div/>

<body/>

<html/>

مثال 9:

()publicActionResult Session02_08

}

;return (View())

{

 روی سشن 08_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<DOCTYPE html!>

<html>

<head>

</"metaname="viewport"content="width=device-width>

<title>Session02_08</title>

<head/>

<body>

<div>

@You can easily write some HTML tag(s) in code block @

@*Session02_08*@

}@

;"string strFirstName = "121

if (strFirstName.StartsWith("1"))

}

;Response.Write("The name starts with \"1\" character!")

{

else

}

<span>

!The name does not start with "1" character

<span/>

{

{

<div/>

<body/>

<html/>

مثال 10:

()public ActionResult Session02_09

}

;return (View())

{

 روی سشن 09_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<!DOCTYPEhtml>

<html>

<head>

</"metaname="viewport"content="width=device-width>

<title>Session02_09</title>

<head/>

<body>

<div>

@You can easily write some HTML tag(s) in code block @

@*Session02_09*@

}@

;"string strFirstName = "121

if (strFirstName.StartsWith("1"))

}

<text>

!The name starts with "1" character

<text/>

{

else

}

<text>

!The name does not start with "1" character

<text/>

{

{

<div/>

<body/>

<html/>

مثال 11:کنترلر در خواست را با پارامتر از کاربر می گیرد و آن پارامتر را به ویو ارسال می کند و ویو با استفاده از آن پارامتر پردازش هایی را انجام میدهد و نتیجه را به کاربر نمایش می دهد

()public ActionResult Session02_10

}

;"!ViewData["Message"] = "Hello World

;return (View())

{

روی سشن 10_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<DOCTYPE html!>

<html>

<head>

</"metaname="viewport"content="width=device-width>

<title>Session02_10</title>

<head/>

<body>

<div>

@*پارامتر را توسط ویو دیتا از کنترلر میگیریم در ویو میتوانیم  هم با ویو دیتا هم با ویو بگ  به آن دسترسی داشته باشیم*@

@*در این حالت ویو بگ اینتلیسنس ندارد*@

@*Session02_10*@

<h3>

ViewBag.Message@

<h3/>

<h3>

ViewData["Message"]@

<h3/>

<div/>

<body/>

<html/>

مثال 12:

()publicActionResult Session02_11

}

;"!ViewBag.Message = "Hello World

;return (View())

{

 

 روی سشن 11_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<DOCTYPE html!>

<html>

<head>

</"metaname="viewport"content="width=device-width>

<title>Session02_11</title>

<head/>

<body>

<div>

@*پارامتر را توسط ویو بگ از کنترلر میگیریم در ویو می توانیم  هم با ویو دیتا هم با ویو بگ به آن دسترسی داشته باشیم*@

@*در این حالت ویو بگ اینتلیسنس ندارد*@

@*Session02_11*@

<h3>

ViewBag.Message@

<h3/>

<h3>

ViewData["Message"]@

<h3/>

<div/>

<body/>

<html/>

مثال 13:یک کلاس پرسن ایجاد میکنیم

;using System

;using System.Collections.Generic

;using System.Linq

;using System.Web

namespace _View.Models

}

publicclassPerson

}

()public Person

}

{

public Person(int id,string fullName)

}

;this.ID = id

;this.FullName = fullName

{

publicint ID { get; set; }

publicstring FullName { get; set; }

{

{

در هوم کنترلر:

()publicActionResult Session02_12

}

=Models.Person oPerson

;new Models.Person(fullName:"Dariush Tasdighi",id:20)

;ViewBag.MyPerson = oPerson

;return (View())

{

 روی سشن 12_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<!DOCTYPEhtml>

<html>

<head>

<metaname="viewport"content="width=device-width"/>

<title>Session02_12</title>

<head/>

<body>

@*پارامتر را که یک شی از کلاس پرسون هست توسط ویو بگ از کنترلر  میگیریم و در ویو می توانیم هم با ویو دیتا هم با ویو بگ به آن دسترسی داشته باشیم*@

@*می توانیم با کست کردن ویو بگ و شی کلاس ویو بگ خود را دارای اینتلیسنس  نماییم*@

@*در این حالت ویو بگ اینتلیسنس دارد *@

@*Session02_12*@

<div>

<h3>

ID: @ViewBag.MyPerson.ID

<h3/>

<h3>

Full Name: @ViewBag.MyPerson.FullName

<h3/>

}@

Solution (1)//

=View.Models.Person oPerson_//

; ViewBag.MyPerson (_View.Models.Person)//

Solution (1)///

Solution (2)//

=View.Models.Person oPerson_

;ViewBag.MyPerson as _View.Models.Person

Solution (2)// /

if (oPerson != null)

}

=string strMessage

,"string.Format("I'm {0} and My ID is: {1}

;(oPerson.FullName, oPerson.ID

strMessage@

{

{

<div/>

<body/>

<html/>

مثال 14:

()public ActionResult Session02_13

}

=Models.Person oPerson

;new Models.Person(fullName: "Dariush Tasdighi", id: 20)

;return (View(oPerson))

{

روی سشن13_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

 

}@

;Layout = null

{

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="width=device-width" />

<title>Session02_13</title>

<head/>

<body>

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

@* می توانیم با کست کردن مدل و شی کلاس مدل خود را دارای اینتلیسنس نماییم *@

@* در این حالت مدل اینتلیسنس دارد *@

@*Session02_13*@

<div>

<h3>

ID: @Model.ID

<h3/>

<h3>

Full Name: @Model.FullName

<h3/>

}@

Solution (1)//

=View.Models.Person oPerson_//

;  ( View.Models.Person)Model//

Solution (1)//

Solution (2)//

=View.Models.Person oPerson_

;ViewBag.Model as _View.Models.Person

Solution (2)//

=string strMessage

.”,string.Format(“I’m {0} and My ID is: {1}

;(Model.FullName, Model.ID

strMessage@

{

<div/>

<body/>

<html/>

مثال 15:

()public ActionResult Session02_14

}

=Models.Person oPerson

;new Models.Person(fullName: "Dariush Tasdighi", id: 20)

;return (View(oPerson))

{

 روی سشن14_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

model _View.Models.Person@

}@

;Layout = null

{

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="width=device-width" />

<title>Session02_14</title>

<head/>

<body>

<div>

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

@* میتوانیم با نوشتن ( اولین کد بالای صفحه )مدل خود را دارای اینتلیسنس نماییم*@

@* در این حالت مدل اینتلیسنس دارد *@

@*Session02_14*@

<h3>

ID: @Model.ID

<h3/>

<h3>

Full Name: @Model.FullName

<h3/>

}@

=string strMessage

,".string.Format("I'm {0} and My ID is: {1}

;(Model.FullName, Model.ID

strMessage@

{

<div/>

<body/>

<html/>

 

مثال 16:

()public ActionResult Session02_15

}

;".ViewBag.FactoryName = "Iran Khodro Co

=Models.Person oPerson

;new Models.Person(fullName: "Dariush Tasdighi", id: 20)

;return (View(oPerson))

{

  روی سشن15_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

model _View.Models.Person@

}@

;Layout = null

{

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="width=device-width" />

<title>Session02_15</title>

<head/>

<body>

<div>

@*  پارامترها را که یک شی از کلاس پرسن و یک نام کارخانه هست توسط یک ویو بگ و ریترن از کنترلر  میگیریم   *@

@* میتوانیم با نوشتن ( اولین کد بالای صفحه )مدل خود را دارای اینتلیسنس نماییم*@

@* در این حالت مدل اینتلیسنس دارد *@

@*Session02_15*@

<h3>

Factory Name: @ViewBag.FactoryName

<h3/>

<h3>

ID: @Model.ID

<h3/>

<h3>

Full Name: @Model.FullName

<h3/>

}@

=string strMessage

,".string.Format("I'm {0} and My ID is: {1}

;(Model.FullName, Model.ID

strMessage@

{

<div/>

<body/>

<html/>

مثال 17:

()public ActionResult Session02_16

}

=Models.Person oPerson

;new Models.Person(fullName: "Dariush Tasdighi", id: 20)

;()ViewModels.Factory oFactory = new ViewModels.Factory

;"oFactory.FactoryName = "Iran Khodro Co

;oFactory.Person = oPerson

;return (View(oFactory))

{

روی سشن16_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

model _View.ViewModels.Factory@

}@

;Layout = null

{

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="width=device-width" />

<title>Session02_16</title>

<head/>

<body>

<div>

@*  پارامتر را که یک شی از کلاس فکتوری که خود یک پراپرتی پرسون دارد توسط ریترن از کنترلر میگیریم*@

@* میتوانیم با نوشتن ( اولین کد بالای صفحه )مدل خود را دارای اینتلیسنس نماییم*@

@* در این حالت مدل اینتلیسنس دارد *@

@*Session02_16*@

<h3>

Factory Name: @Model.FactoryName

<h3/>

<h3>

ID: @Model.Person.ID

<h3/>

<h3>

Full Name: @Model.Person.FullName

<h3/>

}@

=string strMessage

,".string.Format("I'm {0} and My ID is: {1}

;(Model.Person.FullName, Model.Person.ID

strMessage@

{

<div/>

<body/>

<html/>

مثال 18:

()public ActionResult Session02_17

}

=System.Collections.Generic.List<Models.Person> oPeople

;()<new System.Collections.Generic.List<Models.Person

;oPeople.Add(new Models.Person(fullName: "Amir Chabok", id: 1))

;oPeople.Add(new Models.Person(fullName: "Hosein Sadeghi", id: 2))

;oPeople.Add(new Models.Person(fullName: "Ali Jahanshiri", id: 3))

;return (View(oPeople))

{

روی سشن17_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

}@

;Layout = null

{

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="width=device-width" />

<title>Session02_17</title>

<head/>

<body>

<div>

@* پارامتر را که یک لیست جنریک از کلاس پرسون هست توسط ریترن از کنترلر می گیریم  و با مدل با ام بزرگ در این صفحه دسترسی داریم *@

@*Session02_17*@

}@

foreach (var varPerson in Model)

}

<div>

I’m @varPerson.FullName and My ID is: @varPerson.ID

<div/>

</hr >

{

{

}@

foreach (_View.Models.Person oPerson in Model)

}

<div>

I’m @oPerson.FullName and My ID is: @oPerson.ID

<div/>

</hr >

{

{

<div/>

<body/>

<html/>

مثال 19:

()public ActionResult Session02_18

}

=System.Collections.Generic.List<Models.Person> oPeople

;()<new System.Collections.Generic.List<Models.Person

;oPeople.Add(new Models.Person(fullName: "Amir Chabok", id: 1))

;oPeople.Add(new Models.Person(fullName: "Hosein Sadeghi", id: 2))

;oPeople.Add(new Models.Person(fullName: "Ali Jahanshiri", id: 3))

;return (View(oPeople))

{

 روی سشن18_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

<model System.Collections.Generic.IEnumerable<_View.Models.Person@

}@

;Layout = null

{

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="width=device-width" />

<title>Session02_18</title>

<head/>

<body>

<div>

@*  پارامتر را که یک لیست جنریک از کلاس پرسون هست توسط ریترن از کنترلر میگیریم و با مدل با ام بزرگ در این صفحه دسترسی داریم    *@

@* به کد بالای صفحه توجه نمایید مشخص نمودیم چیزی که از کنترلر  ارسال میشود چه جنسی است کالکشن های جنریک از آی اینام ریبل اینهریت میشوند *@

@* در این ویو مدل اینتلیسنس دارد *@

@*Session02_18*@

}@

if (Model.Count() != 0)

}

foreach (var varPerson in Model)

}

<div>

I'm @varPerson.FullName and My ID is: @varPerson.ID

<div/>

</hr >

{

{

{

<div/>

<body/>

<html/>

مثال 20:

()public ActionResult Session02_19

}

=System.Collections.Generic.List<Models.Person> oPeople

;()<new System.Collections.Generic.List<Models.Person

;oPeople.Add(new Models.Person(fullName: "Amir Chabok", id: 1))

;oPeople.Add(new Models.Person(fullName: "Hosein Sadeghi", id: 2))

;oPeople.Add(new Models.Person(fullName: "Ali Jahanshiri", id: 3))

;return (View(oPeople))

{

 روی سشن19_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

<model IEnumerable<_View.Models.Person@

}@

;Layout = null

{

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="width=device-width" />

<title>Session02_19</title>

<head/>

<body>

<div>

@*  پارامتر را که یک لیست جنریک از کلاس پرسون هست توسط ریترن از کنترلر می گیریم و با مدل با ام بزرگ در این صفحه دسترسی داریم     *@

@* در ام وی سی به تعداد از اچ تی ام ال هلپر و اچ تی ام ال هلپر استفاده می نماییم در این صفحه نیز از اچ تی ام ال دات اکشن لینک و اچ تی ام ال دات دیسپلی استفاده نموده ایم*@

@* به کد بالای صفحه توجه نمایید مشخص نمودیم چیزی که از کنترلر ارسال میشود چه جنسی است.کالکشن های جنریک از آی اینام ریبل اینهریت میشوند *@

@* در این ویو مدل اینلیسنس دارد *@

@*Session02_19*@

<p>

@Html.ActionLink("Create New", "Create")

<p/>

<table>

<tr>

<th>

ID

<th/>

<th>

FullName

</th>

<th>Operator</th>

<tr/>

foreach (var item in Model)@

}

<tr>

<td>

Html.DisplayFor(modelItem => item.ID)@

<td/>

<td>

@Html.DisplayFor(modelItem => item.FullName)

<td/>

<td>

|Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ })@

|Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ })@

Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })@

<td/>

<tr/>

{

<table/>

<div/>

<body/>

<html/>

مثال 21:

()public ActionResult Session02_20

}

=System.Collections.Generic.List<Models.Person> oPeople

;()<new System.Collections.Generic.List<Models.Person

;oPeople.Add(new Models.Person(fullName: "Amir Chabok", id: 1))

;oPeople.Add(new Models.Person(fullName: "Hosein Sadeghi", id: 2))

;oPeople.Add(new Models.Person(fullName: "Ali Jahanshiri", id: 3))

;return (View(oPeople))

{

 روی سشن20_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

<model System.Collections.Generic.IEnumerable<_2_View.Models.Person@

}@

;Layout = null

{

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="width=device-width" />

<title>Session02_20</title>

<head/>

<body>

<div>

@* پارامتر را که یک لیست جنریک از کلاس پرسون هست توسط ریترن از کنترلر میگیریم و با مدل با ام بزرگ در این صفحه دسترسی داریم *@

@* در ام وی سی به تعداد از اچ تی ام ال هلپر و اچ تی ام ال هلپر استفاده می کنیم در این صفحه نیز از اچ تی ام ال دات پارشیال استفاده نموده ایم *@

@* به کد بالای صفحه توجه نمایید مشخص نمودیم چیزی که از کنترلر ارسال میشود چه جنسی است.کالکشن های جنریک از آی اینام ریبل اینهریت شده است *@

@* در این ویو مدل اینتلیسنس دارد *@

@*Session02_20*@

<h3>

Learning Partial View

<h3/>

</hr >

<div>

Html.Partial("_DisplayCurrentDateTime")@

<div/>

<div>

Html.Partial("_DisplayCurrentDateTime")@

<div/>

<div>

Html.Partial("_DisplayCurrentDateTime")@

<div/>

<div>

Html.Partial("_DisplayCurrentDateTime")@

<div/>

<div>

Html.Partial("_DisplayCurrentDateTime")@

<div/>

<div/>

<body/>

<html/>

مثال 22:

()public ActionResult Session02_21

}

=System.Collections.Generic.List<Models.Person> oPeople

;()<new System.Collections.Generic.List<Models.Person

;oPeople.Add(new Models.Person(fullName: "Amir Chabok", id: 1))

;oPeople.Add(new Models.Person(fullName: "Hosein Sadeghi", id: 2))

;oPeople.Add(new Models.Person(fullName: "Ali Jahanshiri", id: 3))

;return (View(oPeople))

{

روی سشن21_02 راست کلیک می کنیم و اد ویو را انتخاب میکنیم وارد ویو مربوطه میشویم

<model System.Collections.Generic.IEnumerable<_View.Models.Person@

}@

;Layout = null

{

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="width=device-width" />

<title>Session02_21</title>

<head/>

<body>

<div>

@*  پارامتر را که یک لیست جنریک از کلاس پرسون هست توسط ریترن از کنترلر میگیریم  و با مدل با ام بزرگ در این صفحه دسترسی داریم    *@

@* در ام وی سی به تعداد از اچ تی ام ال هلپر و اچ تی ام ال هلپر استفاده می کنیم در این صفحه نیز از اچ تی ام ال دات پارشیال استفاده نموده ایم *@

@* به کد بالای صفحه توجه نمایید مشخص نمودیم چیزی که از کنترلر ارسال میشود  چه جنسی است کالکشن های جنریک از آی اینام ریبل اینهریت میشوند *@

@* دراین ویو مدل اینتلیسنس دارد *@

@*Session02_21*@

}@

foreach (var varPerson in Model)

}

Html.Partial("_DisplayPerson", varPerson)@

{

{

<div/>

<body/>

<html/>