# ViewData and ViewBag

To pass data from Controller to View - use ViewData or ViewBag

In controller's action code:

```csharp
ViewData["MyData"] = "Some Example Data";
```

and you use it in View as below

```markup
<div>
    My data  I received from controller is: 
    @ViewData["MyData"]
</div>
```

ViewBag is syntactical sugar for ViewData, where instead of using array-like syntax(square brackets) to add a data-key, we use object-like syntax(. notation) to the add data-key:

But ViewBag uses `dynamic` keyword internally, which in turn uses `reflections` internally to figure out the datatype of data at the run time and hence usually more expensive process that simply using `ViewData`.

In controller's action code:

```csharp
ViewBag.MyData = "Some Example Data";
```

and you use it in View as below

```markup
<div>
    My data  I received from controller is: 
    @ViewBag.MyData
</div>
```

ViewBag or ViewData can be passed only from a controller's action to view, its not passed from one action to another action.

You can redirect the control from one action to another action using the method `RedirectToAction(<<actionName>>, <<controller>>)`

\`\`\`cs public class HomeController: Controller{ public ActionResult Index(){ ViewBag.MyOriginalData = "Data from Index action"; // this data will not be available in the below action we are redirected to return RedirectToAction("Home", "Home"); }

public ActionResult Home() { ViewBag.MyData = "Some Example Data"; return View(); } }

To pass data from one action to another, use [TempData](https://jsified-brains.gitbooks.io/asp-net-mvc-scribblings/content/tempdata.html).
