23

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.

4
  • "Partial view contains ActionResult method in the controller" what does this mean? Commented Dec 4, 2013 at 6:17
  • ActionResult Method returns a PartialView Commented Dec 4, 2013 at 6:20
  • Why would you not put this on the model as a property, then pass the property value to the partial view as the partial view's model? Commented Dec 4, 2013 at 6:24
  • you could use TempData instead, that works Commented Jan 17, 2019 at 19:28

6 Answers 6

14

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.

Sign up to request clarification or add additional context in comments.

Comments

14

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

Comments

10

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

Comments

7

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

Comments

0

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 

Comments

-1
return PartialView("partialviewname", obj); 

2 Comments

Can you provide a more thorough explanation for your answer instead of a single line of code?
I agree to MattD. Your answer serves no purpose.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.