asp.net mvc中控制器向视图中传值

1、使用ViewData传输数据到View并展示。

ViewData传值

上面在视图中对数据进行显示,利用了Razor代码,写Razor代码带花括号和没有花括号的区别:

实际上后面跟的是一个代码块时,就应该使用花括号。所谓代码块是指代码行数超过一行或只有一行代码,“@”符号后没有花括号只是简单的显示变量或表达式的值。

言外之意就是,@后面带有花括号的话,花括号中就是代码块,没有花括号,@后面就是跟的一个变量。

这里对ViewData进行了类型转换,为什么需要强制转换类型,因为ViewData可操作内部对象,每次添加新值,会封装成对象类型,因此每次都需要解压来提取值。在使用时需要解压成一个指定类型的对象即可获取到对应的值。

ViewData和TempData的区别

ViewData的数据类型是ViewDataDictionary类的实例化对象,而TempData的数据类型则是TempDataDictionary类的实例化对象;

ViewData 只在当前页面访问,无法跨页传递;TempData则保存在Session中,可以实现跨页传递,且传递一次之后自动删除。TempData只能使用一次,只要使用一次,便就会自动删除。

2、ViewBag传值

ViewData与ViewBag的对比

ViewBag可以称为ViewData的一块关于语法的辅助的糖果,可以传递ViewData,接收时获取ViewBag。意思就是,控制器中传递值得时候,可以使用ViewData来传递,然后在视图中获取时,可以利用ViewBag来获取ViewData中的对应值。

ViewData与ViewBag的问题

性能问题;ViewData中的值都是对象类型,使用之前必须强制转换为合适的类型。会添加额外的性能负担。

没有类型安全就没有编译时错误,如果尝试将其转换为错误的类型,运行时会报错。良好的编程经验告诉我们,错误必须在编译时捕获。

数据发送和数据接收之间没有正确的连接;MVC中,Controller和View是松散的连接的。Controller是无法捕获View变化,View也无法捕获到Controller内部发生的变化。

从Controller传递一个ViewData或ViewBag的值,当开发人员正在View中写入,就必须记录从Controller中即将获得什么值。

如果Controller与View开发人员不是相同的开发人员,开发工作会变得非常困难。会导致许多运行时问题,降低了开发效率。

3、View的强类型传值

传单个实体模型

在视图最上面添加@model demo01.Models.user(这个是我实体模型的具体位置),然后在对值进行展示时就可以直接使用@Model.xxx了。

带有集合的View数据展示

利用Razor代码写foreach循环,对控制器中返回的list在视图中利用Model进行循环遍历,然后依次获取其中的值。

以上,就是从控制器中将值传到视图中的几种方法。

  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值