Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I am confused with this: I have an action ,say Parent ,and in the corresponding view file ,I have called a child action ,say Child ,both Parent and Child actions are in the same controller.

and I need the Child action and the Parent action to share some data in the ViewBag.Now ,what I should do ?Here is my question:

when I call the Child action in parent's view file ,I pass the viewbag to it like this: @Html.Action(ViewBag). in my child action ,I do this:

public PartialViewResult Child(Object ViewBag) {   //using the data in ViewBag } 

Is this the right way ? Does the viewbag object passed by reference or it is a different object then the original viewbag(more memory needed)?

Or if the Child action is sharing the viewbag with its calling parent Action by default?

From Darin Dimitrov's answer ,I knew that I can't do something like this:@Html.Action(ViewBag)

But I really need to pass the child action muti-parameters,what can I do ?

like image 532
NextStep Avatar asked Oct 12 '11 08:10

NextStep


People also ask

What is a child action?

Basically a child action is a controller action that you could invoke from the view using the Html.Action helper: @Html.Action("SomeActionName", "SomeController") This action will then execute and render its output at the specified location in the view.

What is child action only in MVC?

The ChildActionOnly attribute ensures that an action method can be called only as a child method from within a view. An action method doesn't need to have this attribute to be used as a child action, but we tend to use this attribute to prevent the action methods from being invoked as a result of a user request.


1 Answers

Child actions follow a different controller/model/view lifecycle than parent actions. As a result they do not share ViewData/ViewBag. If you want to pass parameters to a child action from the parent you could do this:

@Html.Action("Child", new { message = ViewBag.Message }) 

and in the child action:

public ActionResult Child(string message) {     ... } 
like image 142
Darin Dimitrov Avatar answered Sep 24 '22 01:09

Darin Dimitrov