我有一个母版页,其中有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"];
}
答案 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";