ارسال داده از Controller به View در MVC

سه شنبه 5 آبان 1394

در MVC می توانیم داده را از controller به view مربوط به آن ارسال کنیم، که از طریق ViewData و ViewBag انجام می گیرد. در این مقاله می خواهیم این روش ها را توضیح دهیم.

ارسال داده از Controller به View در MVC

در یک برنامه MVC می توان داده را از طریق ViewBag و  ViewData از controller به View ارسال کرد. همچنین می توان داده را از View با استفاده از Post و QueryString یا HiddenField و کنترلر دیگر به همین کنترلر با استفاده از TempData ارسال کرد.

شکل زیر به طور کلی نحوه ارسال داده از Controller به View را نشان می دهد:

 

ViewData

ViewData یک شیئ مورد استفاده برای ارسال داده از Controller به View در قالب جفت Key-Value می باشد. ViewData از کلاس ViewDataDictionary ارث بری می کند. ViewData در MVC 1.0 معرفی شد.

ViewData برای نوع داده های پیچیده احتیاج به type casting دارد و اگر در یک صفحه تغییر مسیر رخ دهد مقدار آن خالی شده و NULL می شود.

مثال برای ViewData :

یک برنامه ASP.NET MVC خالی ایجاد کنید و یک Controller با نام HomeController به آن اضافه کنید.

 

DateTime یا زمان جاری سیستم را در شیئ ViewData ذخیره کرده و View را return کنید. حالا یک View با نام Index اضافه کنید.

public ActionResult Index()  
{  
    ViewData["DateTime"] = DateTime.Now;  
    return View();  
}

 

 

حالا شیئ ["ViewData["DateTime را با استفاده از نماد @ صدا کنید چرا که در MVC از Razor استفاده می کنیم.

کد Index.cshtml

@{  
    ViewBag.Title = "Index";  
}  
  
<h2>ViewData Example</h2>  
<p>@ViewData["DateTime"]</p>

 

پیش نمایش:

 

ViewBag

ViewBag یک property داینامیک است ( ویژگی جدید در #C)، به این معنا که هیچ نوع property از پیش تعریف شده ندارد. ViewBag یک بسته بندی دور ViewData به حساب می آید به عبارت دیگر نوع داینامیک شده ViewData می باشد. ViewBag از ViewData کندتر است ونیازی به typecasting برای نوع داده پیچیده ندارد.

نرم افزار Visual Studio نمی تواند Intellisense برای شیئ های داینامیک فراهم کند، بنابراین خطا در زمان طراحی قابل دیدن نیست.

مثال برای ViewBag:

در HomeController یک Action Method دیگر(نام آن را Demo قرار دهید) اضافه کنید. زمان جاری سیستم یا DateTime را در ViewBag.DateTime ذخیره کنید و View را return کنید:

public ActionResult Demo()  
{  
   ViewBag.DateTime = DateTime.Now;  
   return View();  
} 

حالا View را با نام Demo اضافه کنید:

کد Demo.cshtml:

@{  
    ViewBag.Title = "Index";  
}  
  
<h2>ViewData Example</h2>  
<p>@ViewData["DateTime"]</p> 

 

پیش نمایش:

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید