如何在asp net mvc3中将值从局部视图传递到父视图

时间:2013-07-15 11:11:46

标签: asp.net-mvc-3 partial-views

我有一个母版页,其中有3个局部视图渲染,它包含一个视图渲染体(内容占位符)。

我正在尝试将数据(任何字符串)从我的子视图传递到母版页上呈现的局部视图之一。为此,我使用Viewbag,但在父视图中无法访问。

我的代码如下:

我的主页:[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>

我的孩子观点:[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>

我的控制器代码:

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

现在我想在Header_PartialView次观看中访问我的TestPage数据。

@{
    var test = ViewBag.testData1;
    var test2 = ViewData["testData2"];
 }

4 个答案:

答案 0 :(得分:5)

要从Header_PartialView中的TestPage访问数据,您需要将其作为Html.RenderAction() Main_LayoutPage.cshtml上的参数传递给@{ var test = ViewBag.testData1; } @{Html.RenderAction("Header_PartialView", "Home", new { test = test });} ,如下所示:

Header_PartialView

string test操作中添加参数public ActionResult Header_PartialView(string test) { return View(model: test); } 并将其作为模型传递,因为布局中的ViewBag不会出现在这里。

Header_PartialView.cshtml

然后在@model string @{ Layout = null; } <div>@Model</div> 上获取代码:

{{1}}

答案 1 :(得分:1)

在你的部分中尝试这样:

@{
    var test = ViewContext.ParentActionViewContext.ViewData["testData1"];
    var test2 = ViewContext.ParentActionViewContext.ViewData["testData2"];
}

答案 2 :(得分:1)

我认为最好在这里使用HttpContext.Items

@{
    this.ViewContext.HttpContext.Items["Stuff"] = "some-data";
}

您可以在请求中呈现的每个视图中访问此数据。此数据对单个HTTP请求有效。

更多信息:

https://msdn.microsoft.com/en-us/library/system.web.httpcontext.items(v=vs.110).aspx

When can we use HttpContext.Current.Items to stores data in ASP.NET?

答案 3 :(得分:1)

我只需使用

即可传递价值

TempData["Msg"]="My Data";

而不是ViewBag.Msg="My Data";