2

我有一个母版页,其中渲染了 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

4 回答 4

5

要从 Header_PartialView 中的 TestPage 访问数据,您需要将其作为参数传递给Html.RenderAction()on,Main_LayoutPage.cshtml如下所示:

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

并且在Header_PartialView行动中添加参数string test并将其作为模型传递,因为来自布局的 ViewBag 没有出现在这里。

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

然后Header_PartialView.cshtml你得到代码:

@model string

@{
    Layout = null;
}
<div>@Model</div>
于 2013-07-15T22:35:39.570 回答
1

在你的部分尝试这样:

@{
    var test = ViewContext.ParentActionViewContext.ViewData["testData1"];
    var test2 = ViewContext.ParentActionViewContext.ViewData["testData2"];
}
于 2013-07-15T12:50:32.903 回答
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

我们什么时候可以使用 HttpContext.Current.Items 在 ASP.NET 中存储数据?

于 2015-07-19T22:01:01.017 回答
1

我能够通过简单地使用来传递价值

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

代替ViewBag.Msg="My Data";

于 2016-06-18T11:01:52.090 回答