Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass value from partial view to parent view in asp net mvc3

I have one master page in which 3 partial view renders and it contains one render body (content place holder) for views.

I am trying to pass data (any string) from my child view to one of the partial view rendered on master page. And for this I am using Viewbag but its not accessble on parent view.

My Code is below :

My Master page: [ Main_Layout.chtml ]

<body>
    <div>
        @{Html.RenderAction("Header_PartialView", "Home");}
    </div>
    <div>
        <table cellpadding="0" cellspacing="0" width="100%">
            <tr valign="top">
                <td id="tdLeft" class="lftPanel_Con">
                    <div>
                        @{Html.RenderAction("LeftPanel_PartialView", "Home");}
                    </div>
                </td>
                <td id="tdRight" width="100%">
                    <div>
                        @RenderBody()
                    </div>
                </td>
            </tr>
        </table>
    </div>
    <!--start footer-->
    <div>
        @{Html.RenderAction("Footer_PartialView", "Home");}
    </div>
</body>

My Child View : [ TestPage1.chtml ]

    @{
        ViewBag.Title = "TestPage1";
        Layout = "~/Views/Shared/Main_LayoutPage.cshtml";

        var test1 = ViewBag.testData1;
        var test2 = ViewData["testData2"];

    }

<h2>TestPage1</h2>
<div>This is only for testing</div>

My Controller Code :

public ViewResult TestPage1()
        {
            ViewBag.testData1 = "My first view bag data";
            ViewData["testData2"] = "My second view data";
            return View();
        }

Now I want to access data of my TestPage on Header_PartialView views.

@{
    var test = ViewBag.testData1;
    var test2 = ViewData["testData2"];
 }
like image 493
RKK Avatar asked Jan 25 '26 18:01

RKK


2 Answers

For access the data from TestPage in Header_PartialView you need to pass it as a parameter in Html.RenderAction() on Main_LayoutPage.cshtml like this:

@{ var test = ViewBag.testData1; }
@{Html.RenderAction("Header_PartialView", "Home", new { test = test });}

And in Header_PartialView action add parameter string test and pass it like as a model because ViewBag from layout doesn't comes here.

public ActionResult Header_PartialView(string test)
{
    return View(model: test);
}

Then on Header_PartialView.cshtml you are getting the code:

@model string

@{
    Layout = null;
}
<div>@Model</div>
like image 89
Oleksii Aza Avatar answered Jan 28 '26 16:01

Oleksii Aza


Try like this in your partial:

@{
    var test = ViewContext.ParentActionViewContext.ViewData["testData1"];
    var test2 = ViewContext.ParentActionViewContext.ViewData["testData2"];
}
like image 39
Darin Dimitrov Avatar answered Jan 28 '26 16:01

Darin Dimitrov