是否可以在父版式中使用ViewBag或View的模型?

时间:2019-01-18 02:40:20

标签: asp.net-core-2.1

我有一个.Net Core 2.1网站,基本上我正在尝试访问子视图中可用的共享布局中的数据。我可以从ViewBag或视图中的View模型中获得所需的东西-有某种方式可以引用它吗?

如果没有任何想法,什么是在我的布局中获取数据的最佳方法?我看过诸如https://www.davepaquette.com/archive/2016/01/02/goodbye-child-actions-hello-view-components.aspx之类的ViewComponents,但是似乎仅仅抓住字符串或模型之类的东西就显得有些过头了。不幸的是,我不能使用会话数据来传递值。

非常感谢,很抱歉,这是一个菜鸟问题(我是.net核心!)。

2 个答案:

答案 0 :(得分:0)

传递对象

对于传递对象,您可以使用 ViewBag ViewData 。两者都使用下面的ViewDataDictionary以类似的方式工作,这意味着您可以互换使用它们。

要设置值:

ViewBag.HelloWorld = "Hello world!";
ViewData["HelloWorld"] = "Hello world!";

要使用视图中的值:

@ViewBag.HelloWorld
@ViewData["HelloWorld"]

ViewDataDictionary可以在控制器和视图中填充和使用。

使用ViewBag和ViewData的区别:

ViewBag 是从DynamicViewData派生而来,不需要强制转换,但不允许您在其中设置空格。

ViewData 来自ViewDataDictionary,并提供有用的字典属性和功能。键也可以包含空格。需要强制类型转换,或默认为ToString()


传递HTML块

您还可以传递HTML块,在内部布局中可以呈现部分

@RenderSection("Header", required: false)

然后您可以在各个视图中插入该部分

@section Header {
    <strong>I sit in the existing header!</strong>
}

答案 1 :(得分:0)

答案是肯定的-您可以在父级共享布局中使用子视图的ViewBag和ViewData对象。