ViewData和ViewBag有什么区别?

我们两清 提交于 2020-03-15 17:44:12

我在MVC 3中看到了ViewBag 。与MVC 2中的ViewData有什么不同?


#1楼

ViewData :它需要对复杂数据类型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(); 
    }
}

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>

#2楼

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();
}   

在视野中呼唤

@ViewBag.Name    
@ViewData["Name"]

#3楼

viewdata:是用于在View和控制器之间存储数据的字典,你需要将视图数据对象转换为视图中的相应模型,以便能够从中检索数据...

ViewBag:是一个类似于视图数据的动态属性,但是它更好,因为在视图中使用它之前不需要将其转换为其corressponding模型...


#4楼

public ActionResult Index()
{
    ViewBag.Name = "Monjurul Habib";
    return View();
}

public ActionResult Index()
{
    ViewData["Name"] = "Monjurul Habib";
    return View();
} 

In View:

@ViewBag.Name 
@ViewData["Name"] 

#5楼

ViewBag和ViewData是用于在ASP.Net MVC中将信息从控制器传递到视图的两种方法。 使用这两种机制的目的是提供控制器和视图之间的通信。 两者都有短暂的生命,一旦重定向发生,两者的值都变为null,即,一旦页面从源页面(我们设置ViewBag或ViewData的值)重定向到目标页面,ViewBag和ViewData都是变为空。

尽管有这些相似之处(ViewBag和ViewData),如果我们谈论两者的实现,它们是两回事。 差异如下:

1.)如果我们分析两种实现方式,那么我们会发现ViewData是一个字典数据结构 - 从ViewDataDictionary派生的对象字典,可以使用字符串作为这些值的键来访问,而ViewBag则使用C#4.0中引入的动态特性和是一个动态的属性。

2.)在从ViewData访问值时,我们需要对值(数据类型)进行类型转换,因为它们在ViewData字典中存储为对象,但是如果我们在ViewBag的情况下访问th值则没有这种需要。

3.)在ViewBag中,我们可以像这样设置值:

      ViewBag.Name = "Value"; 

并可以访问如下:

          @ViewBag.Name

在ViewData的情况下,可以按如下方式设置和访问值:设置ViewData,如下所示:

ViewData["Name"] = "Value";

和访问这样的价值

 @ViewData["Name"] 

有关详情, 请点击此处:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!