ASP.NET MVC控制器向视图传递数据

第1节:ViewBag的使用

基本概念

在ASP.NET MVC中,有一个特殊的ViewBag对象,ViewBag是一个dynamic动态类型,定义在ControllerBase类中,可以在此对象上定义任意的属性,且还可以在控制器和视图之间传递数据。ViewBag对象的定义如下图所示:

MVC ViewBag

图1

在图1中清楚的看到ViewBag是一个定义在ControllerBase类中的只读属性,其类型是dynamic。

ViewBag的用法是可以在此对象上定义任意名称的变量。基本格式如下:

ViewBag.变量名=值

如:ViewBag.Title=“小强”,ViewBag.Sum=200等。

控制器与视图通信

现在我们还没有学习到模型,模型是可以在视图和控制器之间传递数据的。ViewBag也可以在控制器和视图之间传递数据,它是一种最为简单的数据传递方式。

下面我们在控制器中使用ViewBag对象定义属性向视图传递数据。创建一个名称为YidoController的控制器,并在Index()方法中编写如下C#代码:

MVC ViewBag定义属性

图2

在图2的代码中,我们在ViewBag中定义了Name、Sum、Price这3个属性,并且都赋了值。

Index()方法的代码如下:

public ActionResult Index(){ViewBag.Name = "小强";ViewBag.Sum = 200;ViewBag.Price = 98.88;return View();}

从ViewBag上定义的属性类型可知,属性类型是任意的,没有限制,需要向视图传递什么数据,就定义什么类型的属性。

现在将定义的3个属性的值传递到视图中,只需要在视图中使用控制器返回的ViewBag对象即可。C#代码如图3所示:

ASP.NET MVC 视图

图3

在图3中,使用了@符号,在@符号后面可以使用C#代码,这样就可以在Html代码中使用C#代码获取数据,然后填充到Html标记中。

Index.cshtml核心代码如下:

  • Name=@ViewBag.Name
  • Sum=@ViewBag.Sum
  • Price=@ViewBag.Price

运行一下图3的C#代码,结果如图4所示:

ASP.NET MVC 方法参数

图4

在图4中,我们已经看到在控制器中给ViewBag对象的属性所赋的值,现在已传递给视图了,这样我们就可以在控制器和视图之间传递一些简单的数据了。

如果我们在Controller中,给ViewBag对象的属性所赋的值是从SQL Server数据库中获取的,那么在视图中就可以展示从数据库中获取的数据了。

第2节:操作方法的参数

对于C#中的方法,是可以带有参数的,参数类型任意定义。而在ASP.NET MVC的控制器中是可以定义方法的,控制器本身就是一个类,只是继承了Controller基类而已。

那么控制器既然是类,就可以创建方法,只不过,控制器中的方法我们称为操作方法而已。

ASP.NET MVC控制器中带有参数的方法,这个参数用途与普通方法的参数是有区别的。控制器中操作方法的参数是从URL地址中传过来的。这样可以实现根据URL参数来有条件的从数据库中获取数据。

下面我们对操作方法的2种类型的参数进行详细讲解,这2种类型的参数是最为常用的,分别是文本参数和Id参数。文本参数就是字符串,URL地址本身就是一个字符串,因此,使用字符串参数更为合适,而Id参数是指数据库表中的主键字段,具有唯一性,可以用来快速的从数据库中获取行数据。

文本参数

对于ASP.NET MVC控制器中的操作方法,是可以使用文本参数的。如下C#代码,在Index()方法中传递一个string类型的name参数。

ASP.NET MVC 文本参数

图5

我们对上面的Index()方法代码进行了修改,将ViewBag.Name属性的值修改为参数name变量的值。

当在URL地址中输入name的值后,就会被Index()方法接收并将值赋值给ViewBag.Name属性,而Name属性的值又在Index视图中显示出来了。

现在运行一下图5的代码,查看一下结果,如图6所示:

ASP.NET MVC 获取参数值

图6

我们知道,在URL地址中,第一个参数是使用?分开的,从第二个参数以后就使用&将多个参数分开。所以在图6中,URL地址中使用了?name=大黄。name是参数变量,“大黄”是参数值。

Id参数

这里为什么要说一下id参数呢?因此id参数在Web应用程序中最为常见,基本上后台和前台系统都会使用到该id参数,用于获取数据库表中的行数据。

在ASP.NET MVC的路由配置中,就有id参数,如图7所示:

ASP.NET Id参数

图7

从路由配置上看,id是可选参数,可有可无。

如果URL上使用的是id参数,则可以使用/id的方法访问,注意:方法的参数名必须是id。如下Index()方法的代码:

ASP.NET MVC带有Id的参数

图8

并修改一下Index.cshtml视图中的代码,显示ViewBag.Id的值。访问时必须加上Index方法名,方法的参数名必须是id,但至于是什么数据类型,则就不无所谓了,可以是字符串,也可以是数字。运行一下图8的代码,结果如图9所示:

ASP.NET MVC获取id参数

图9

图9中访问id参数的方法与访问name参数的方法一样。但对于id参数来说,还有一种更酷的访问方式,如图10所示:

图10

在图10中,没有使用问号,而是使用了/,这样的URL地址更人性化,且容易记忆和使用。

至此,我们对控制器和视图之间的通信采用了ViewBag和操作方法的形式传递数据。等学习了模型之后,可以使用模型传递大量的数据,使用ViewBag和参数传递少量的数据。

部分视图传viewbag_NET开发-MVC中如何使用ViewBag和操作方法参数向视图传递数据?...相关推荐

  1. mvc后台字符串转换html,在mvc中,使用summernote编辑器,我想发送数据的内容字符串和HTML到控制器...

    我是MVC的首发,所以有一些我不能做的. Summernote编辑器用于编写博客,Ajax用于发布.在这个编辑器里面写了一些字符后,smmernote编辑器和其他字符串数据中的这个html数据必须和a ...

  2. ASP.NET MVC Tip #31: 给 Master Pages 和 User Controls 传递数据

    原文地址:ASP.NET MVC Tip #31 – Passing Data to Master Pages and User Controls 原文作者:swalther 本文译者:QLeelul ...

  3. python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation)

    python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation Funct ...

  4. python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性、自定义设置自相关图的标题、数据点的色彩

    python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性.自定义设置自相关图的标题.数据点的色彩(plot the a ...

  5. struts2在action中获取request、session、application,并传递数据

    假设仅仅是通过request.session.application传递数据,则不须要获取对应的对象也能够传递数据,代码例如以下: ScopeAction.java: package com.ithe ...

  6. Asp.net MVC中ViewData与ViewBag的使用方法(改)

    在做MVC开发时经常会用到ViewData和ViewBag进行传值操作,因为很常用所以在这里总结一下,以方便后来人. Album.cs: [csharp] view plain copy using  ...

  7. mvc中viewdata 和viewbag的区别

    ViewData                                                                           ViewBag 它是Key/Val ...

  8. android开发 BaseAdapter中getView()里的3个参数是什么意思

    BaseAdapter适配器里有个getView()需要重写public View getView(int position,View converView,ViewGroup parent){ // ...

  9. ASP.NET MVC中ViewData、ViewBag和TempData

    1.ViewData 1.1 ViewData继承了IDictionary<string, object>,因此在设置ViewData属性时,传入key必须要字符串型别,value可以是任 ...

最新文章

  1. 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V4 -- 远程方法调用 整合 Spring 自动注册...
  2. PHP 读写TXT与Mysql性能测试
  3. hdu 5493 Queue(逆序对,线段树)
  4. 第0章:战胜恐惧和懊悔
  5. phpcms_v9推送到其他栏目后再在其他栏目删除导致数据库出错
  6. 打印出不同顺序的字符串单引号和双引号的差异
  7. mysql 中文排序_mysql如何按照中文排序解决方案
  8. 课节6: 图神经网络进阶模型之 ERNIESage下
  9. 百度08年网页搜索份额73.2% 创历史新高
  10. EasyRecovery如何恢复游戏——英雄联盟
  11. Delphi 7 在Win 7 下的安装使用
  12. 三菱凌云3故障代码_三菱故障代码一览表
  13. 现在Web前端培训,哪个机构比较好?
  14. Selenium实践-拉钩网招聘信息
  15. HTTPS中的数字证书是什么?数字签名又是什么?
  16. ie11兼容问题汇总及解决方案
  17. Unity5.x 灯光烘焙GI和LightingMap
  18. 关于打开浏览器jsp文件显示源代码的问题
  19. Ubuntu 18.04 与 Win10 双系统
  20. neo4j安装详细步骤(小白版)

热门文章

  1. “两会”热议新型智慧城市,从数字大脑向智能体演进
  2. Spark On YARN启动流程源码分析
  3. Hdfs文件系统目录树以及INode类分析
  4. .NET开发AutoCAD指南(一)
  5. AutoCAD 命令统计魔幻球的实现过程--(3)
  6. 新规范关于工程总承包项目组织机构的设置及岗位解读
  7. 主键索引就是聚集索引?MySQL 索引类型大梳理
  8. 强化法务管理工作,提升内部管理
  9. 关闭 VS的实时调试器
  10. [C1进阶之路-Web基础] 转义字符