use*_*652 325 .net viewdata viewbag asp.net-mvc-3 difference
我ViewBag
在MVC 3中看到了.ViewData
与MVC 2有什么不同?
Dar*_*rov 378
它使用C#4.0动态功能.它实现了与viewdata相同的目标,应该避免使用强类型视图模型(应该避免使用与viewdata相同的方式).
所以基本上它取代了魔术字符串:
ViewData["Foo"]
Run Code Online (Sandbox Code Playgroud)
具有魔力属性:
ViewBag.Foo
Run Code Online (Sandbox Code Playgroud)
你没有编译时的安全性.
我继续责怪微软在MVC中引入这个概念.
属性的名称区分大小写.
Ric*_*nco 42
内部ViewBag属性在ViewData字典中存储为名称/值对.
注意:在MVC 3的大多数预发布版本中,ViewBag属性被命名为ViewModel,如MVC 3发行说明中的片段中所述:
(编辑10-8-12)有人建议我发布我发布的这个信息的来源,这里是来源:http: //www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4
MVC 2控制器支持ViewData属性,使您可以使用后期绑定字典API将数据传递到视图模板.在MVC 3中,您还可以使用ViewBag属性稍微简单的语法来实现相同的目的.例如,您可以编写ViewBag.Message ="text",而不是编写ViewData ["Message"] ="text".您不需要定义任何强类型类来使用ViewBag属性.因为它是动态属性,所以您只需获取或设置属性,它将在运行时动态解析它们.在内部,ViewBag属性作为名称/值对存储在ViewData字典中.(注意:在MVC 3的大多数预发布版本中,ViewBag属性被命名为ViewModel属性.)
Aru*_*ash 34
ViewBag与MVC中的ViewData
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
ViewBag和ViewData之间的相似之处:
从控制器移动到视图时,有助于维护数据.用于将数据从控制器传递到相应的视图.短寿命意味着当重定向发生时,值变为空.这是因为他们的目标是提供一种在控制器和视图之间进行通信的方法.它是服务器调用中的通信机制.
ViewBag和ViewData之间的区别:
ViewData是一个对象字典,它是从ViewDataDictionary类派生的,可以使用字符串作为键访问.ViewBag是一个动态属性,它利用了C#4.0中的新动态功能.ViewData需要对复杂数据类型进行类型转换,并检查空值以避免错误.ViewBag不需要对复杂数据类型进行类型转换.
ViewBag和ViewData示例:
public ActionResult Index()
{
ViewBag.Name = "Arun Prakash";
return View();
}
public ActionResult Index()
{
ViewData["Name"] = "Arun Prakash";
return View();
}
Run Code Online (Sandbox Code Playgroud)
在视野中呼唤
@ViewBag.Name
@ViewData["Name"]
Run Code Online (Sandbox Code Playgroud)
Nar*_*ani 31
ViewData
:它需要对复杂数据类型进行类型转换,并检查空值以避免错误.
ViewBag
:它不需要为复杂数据类型进行类型转换.
请考虑以下示例:
public class HomeController : Controller
{
public ActionResult Index()
{
var emp = new Employee
{
EmpID=101,
Name = "Deepak",
Salary = 35000,
Address = "Delhi"
};
ViewData["emp"] = emp;
ViewBag.Employee = emp;
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
代码View
如下:
@model MyProject.Models.EmpModel;
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "Welcome to Home Page";
var viewDataEmployee = ViewData["emp"] as Employee; //need type casting
}
<h2>Welcome to Home Page</h2>
This Year Best Employee is!
<h4>@ViewBag.Employee.Name</h4>
<h3>@viewDataEmployee.Name</h3>
Run Code Online (Sandbox Code Playgroud)
Bar*_*xto 22
所有答案都表明ViewBag
和/或是ViewData
将数据传递Controller
给Views
错误的信息.两者都非常有用,可以将数据从视图传递到布局或部分传递到视图(或ViewComponents等).它不是控制器独占的.
作为默认的asp.net示例在布局页面中有这个:
<title>@ViewData["Title"] - MyApp</title>
Run Code Online (Sandbox Code Playgroud)
在任何观点
ViewData["Title"] = "Details";
Run Code Online (Sandbox Code Playgroud)
那么,问一下这个问题:" ViewBag
和之间有什么区别ViewData
?"
最显着的区别是ViewData
强类型字典,而
ViewBag
动态类型.
请注意,里面的数据是相同的
ViewData["Title"] = "MyTitle";
ViewBag.Title; // returns "MyTitle";
Run Code Online (Sandbox Code Playgroud)
什么时候使用?
ViewBag
不支持无效的C#名称.你不能访问ViewData["Key With Space"]
与ViewBag
ViewBag.Something
是动态的,在调用需要在编译时知道确切参数的方法(如扩展方法)时可能会遇到问题.ViewBag
可以检查nulls语法清理: ViewBag.Person?.Name
ViewData
拥有字典的所有属性,如ContainsKey
,Add
等,所以你可以使用ViewData.Add("somekey", "somevalue")
记住它可能会抛出异常.ViewData
在视图上使用需要TypeCasting而不需要ViewBag
.了解细微的差异,使用一个或另一个更多的是品味偏好.
通常你可以想到ViewBag.AnyKey
别名ViewData["AnyKey"]
noo*_*otn 14
我可以建议您不要使用吗?
如果要将数据"发送"到屏幕,请发送强类型对象(AKA ViewModel),因为它更容易测试.
如果你绑定到某种"模型"并具有随机的"viewbag"或"viewdata"项目,那么它使自动化测试变得非常困难.
如果您正在使用这些,请考虑如何重组并使用ViewModel.
Ala*_*ald 11
有一些微妙的差异意味着您可以使用与视图略有不同的ViewData和ViewBag.这篇文章中概述了一个优点http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx并显示了这一点可以通过使用ViewBag而不是ViewData来避免示例.
viewdata:是用于在View和控制器之间存储数据的字典,你需要将视图数据对象转换为视图中的相应模型,以便能够从中检索数据...
ViewBag:是一个类似于视图数据的动态属性,但是它更好,因为在视图中使用它之前不需要将其转换为其corressponding模型...
小智 6
下面是关于 ViewData、ViewBag、TempData 和 Session 的点对点差异。 信用/复制 askforprogram.in,按照我在这里没有提到的代码示例的链接。
MVC 中的视图数据
MVC 中的 ViewBag
MVC 中的临时数据
MVC 中的会话