.NET MVC传值

五种常见的数据传递方式

1,ViewBag

  • C# 4.0引入,dynamic类型,object式的操作。
  • dynamic 类型将在运行时确定内存,因此在使用时无需强转类型。
  • object - ViewBag对象是语言提供的,所有的key都挂载在这个对象上,对象的实例化不需要程序员手工操作。按照面向对象,类对空值或null的默认赋值,我们不需要对ViewBag成员进行空或null的判断。
  • 由于是动态类型,大量的数据并不适合由其携带,会导致性能问题。
  • CV之间的传值。

Controller :

 public ActionResult Index()
 {
     ViewBag.message = "这是一条来自ViewBag的消息";
     return View();
 }

View:

 @ViewBag.message

2,ViewData

  • 继承自ViewDataDictionary类的Dictionary。
  • 对于复杂数据类型需要强类型转化,以避免意外错误。
  • ViewData的生命周期由其所在的View决定,也意味着无法跨越视图传值。
  • 在重定向(redirection)后,ViewData中存储的变量值将变为null,在取ViewData的值时还需要进行null或空的判断。
  • CV之间的传值
  • 相比于ViewBag,本质的差异就是一个是dynamic,一个是Dictionary。

Controller :

public ActionResult Index()
{
    ViewData["Message"] = "这是一条来自ViewData的消息";
 
    return View();
}

View:

@ViewData["Message"]

3,DataTemp

  • 继承自TempDataDictionary的Dictionary。
  • 默认情况下是基于Session存储机制之上。(你也可以基于其他存储机制实现, 通过自定义ITempDataProvider来完成,参见: Session-less Controllers and TempData in ASP.NET MVC)
  • 其生命周期取决于请求次数,默认情况下第二次请求结束后自动标记且删除,可以跨越Action,重定向后数据仍然可共享。
  • 取出DataTemp值时需要判断null或空,视图层还需额外的类型转化
  • 多页面多Action之间的传值

Controller :

public ActionResult Index()
{
    DataTemp["Message"] = "这是一条来自DataTemp消息";
 
    return View();
}

View:

@DataTemp["Message"]

4,Model

  • 强类型传递,意味着VS可以有代码提示(编译器自动检测到了该类型)
  • 安全,逻辑性强,易维护
  • M-V-C传递

Model:

.NET MVC传值_第1张图片

Controller :

.NET MVC传值_第2张图片

View:

.NET MVC传值_第3张图片

 browser:

.NET MVC传值_第4张图片

5,Session

  • 存在于服务端,生命周期为整个会话期
  • 同样需要进行空或null的判断,及类型的转化
  • 用法与效果与TempData类似
  • 跨页面,跨方法传值

Controller:

.NET MVC传值_第5张图片

将会得到与上面相同的效果,当然这只是最基本是用法,并没有凸显出类似TempData的效果,但这并不意味不行,读者可以自己去尝试一下。

你可能感兴趣的:(.NET)