.NET开发--MVC中如何使用ViewBag和操作方法参数向视图传递数据

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核心代码如下:

<ul>

<li>Name=@ViewBag.Name</li>

<li>Sum=@ViewBag.Sum</li>

<li>Price=@ViewBag.Price</li>

</ul>

运行一下图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和参数传递少量的数据

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值