Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pass viewbag to partial view from action controller

I have a mvc view with a partial view.There is a ActionResult method in the controller which will return a PartialView. So, I need to pass ViewBag data from that ActionResult method to Partial View.

This is my Controller

public class PropertyController : BaseController
{
    public ActionResult Index()
    {
        return View();
    }
    public ActionResult Step1()
    {
        ViewBag.Hello = "Hello";
        return PartialView();
    }
}

In Index.cshtml View

@Html.Partial("Step1")

Step1.cshtml partial view

@ViewBag.Hello

But this is not working. So, what is the correct way to get data from viewbag. I think I'm following wrong method. Please guide me.

like image 882
cp100 Avatar asked Dec 04 '13 06:12

cp100


People also ask

Can we pass ViewBag from view to controller?

Yes you cannot pass a Viewbag from view to controller. But you can pass them using TempData. Add this to your View. But this TempData passes the information as an object.

How do you pass a model from view to partial view?

To create a partial view, right click on Shared folder -> select Add -> click on View.. Note: If the partial view will be shared with multiple views, then create it in the Shared folder; otherwise you can create the partial view in the same folder where it is going to be used.


2 Answers

You can use it as mentioned below :

In your View :

@Html.Partial("[ViewName]", (string)ViewBag.Message)

And Your partial View :

@model String

<b>@Model</b>

As Shown Above ViewBag.Message will be passed to the partial view. and in your partial view you can use it as a @Model.

Note : here type of ViewBag.Message is string. You can pass any type.

like image 77
SpiderCode Avatar answered Oct 16 '22 08:10

SpiderCode


If you don't have to use ViewBag, you can use TempData. TempData is shared for the whole execution chain.

public class PropertyController : BaseController
{
    public ActionResult Index()
    {
        return View();
    }
    public ActionResult Step1()
    {
        TempData["Hello"] = "Hello";
        return PartialView();
    }
}

In Index.cshtml View

@Html.Partial("Step1")

Step1.cshtml partial view

@TempData["Hello"]
like image 13
Veysel Ozdemir Avatar answered Oct 16 '22 09:10

Veysel Ozdemir