欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

.NET MVC传值

程序员文章站 2022-04-02 11:52:31
...

五种常见的数据传递方式

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传值

Controller :

.NET MVC传值

View:

.NET MVC传值

 browser:

.NET MVC传值

5,Session

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

Controller:

.NET MVC传值

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