cp100
cp100

Reputation: 1493

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.

Upvotes: 23

Views: 82326

Answers (6)

bthn
bthn

Reputation: 196

Old question but if anyone here to find solution for this question..

You can pass viewbag value to partial with viewdatadictionary.

In your view:

@Html.Partial("_Partial", "", new ViewDataDictionary { { "permalink", ViewBag.Permalink } })

and in partial view use it like this:

ViewData["permalink"]

Upvotes: 10

Andrew Sin
Andrew Sin

Reputation: 93

You can try this in order to pass ViewBag to partial view from action:

Your controller:

public class PropertyController : Controller
{
    public ActionResult Index()
    {
        return View();
    }


    public ActionResult Step1()
    {
        ViewBag.Hello = "Hello";

        return PartialView("_Partial1", ViewBag.Hello);
    }
}

Your view (Index.cshtml):

@Html.Action("Step1")

Your partial view (_Partial1.cshtml):

@ViewBag.Hello

Upvotes: 0

Veysel Ozdemir
Veysel Ozdemir

Reputation: 685

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"]

Upvotes: 14

sanuj gandhi
sanuj gandhi

Reputation: 17

return PartialView("partialviewname", obj);

Upvotes: -1

SpiderCode
SpiderCode

Reputation: 10122

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.

Upvotes: 14

ps2goat
ps2goat

Reputation: 8475

"Child actions follow a different controller/model/view lifecycle than parent actions. As a result they do not share ViewData/ViewBag."

The answer provides an alternate way of passing data.

Does a child action share the same ViewBag with its "parents" action?

Upvotes: 7

Related Questions