繁体   English   中英

ASP.NET MVC的新功能,我不了解ViewData和/或ViewBag的用法

[英]New to ASP.NET MVC, I don't understand the use of ViewData and/or ViewBag

我正在尝试学习ASP.NET MVC,并且在我们公司中使用ViewBag遇到了一些代码。 我研究了它的含义,它似乎只是一个变量的容器,可以在控制器中声明这些变量,然后从视图中对其进行访问。

我使用了其他框架,例如Ruby on Rails和Struts,这些框架都不会让我这么做。 特别是在Ruby on Rails中,我可以通过执行以下操作在视图中轻松调用get变量:

 <%= variable %>

进一步的研究使我相信不鼓励使用ViewData和ViewBag。 有人可以通过直接从控制器获取变量来解释其用法吗?

谢谢。

在ASP.NET MVC中,您必须将视图所需的数据从控制器显式传递到视图。

鼓励这样做的方法是使用强类型视图并以类实例的形式传递数据:

public ActionResult MyAction() {
    return View(new MyViewModel { Prop1 = "Value1", ... });
}

在您的视图中,指定视图使用的模型类:

@model MyViewModel

ViewData和ViewBag是将数据传递到视图的替代/历史方式。 ViewData是一个字典,需要进行类型转换才能从中获取值。 ViewBag是一个动态对象。 两者都缺乏从强类型输入视图中获得的好处。

ViewData具有其他一些属性来访问模型元数据或模型状态。 例如,请参见ViewData.ModelMetadata

有人可以通过直接从控制器获取变量来解释其用法吗?

是的,去耦。 MVC模式指出,视图不依赖于控制器。 当您的视图可以访问控制器的属性时,它将耦合到该特定控制器,并且MVC中的M消失了。

ViewBag和ViewData均用于维护视图/控制器去耦。 通常适合ViewModel的数据可以放置在ViewBag或ViewData中,以供视图使用。 例如,诸如选择列表数据之类的数据不一定特定于视图。

ViewBag和ViewData之间的区别在于,视图数据是作为键/值容器(字典)访问的,其中ViewBag中的数据是通过属性(它是动态对象)进行访问的,因此将新值分配给“属性”创建属性)。

更新:

使用<%= variable %>您将直接在特定视图上访问变量。 为了让控制器设置该值,必须将其耦合到视图并直接分配它。 当然,这是可行的,但是会直接将耦合引入您可能不需要的视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM