Controller与View数据传递 多Model传递

本文介绍了ASP.NET MVC中两种常用的数据传递方式:ViewBag变量方式与ViewModel方式,并对比了两者的特点。推荐使用ViewModel方式进行数据聚合,以提高代码的可读性和可维护性。

1)ViewBag变量方式

使用4个ViewBag变量进行数据传递,Data1、Data2、Data3、Data4的数据直接从数据库里调。

Control中伪代码如下所示:

复制代码
1         public ActionResult CnBlogIndex()
2         {
3 ViewBag.Data1 = Data1; 4 ViewBag.Data2 = Data2; 5 ViewBag.Data3 = Data3; 6 ViewBag.Data4 = Data4; 7 return View(); 8 }
复制代码

View中伪代码如下所示:

复制代码
 1 //第一块内容
 2 @foreach (Data1 data in (ViewBag.Data1 as IEnumerable<Data1>))  3 {  4 <tr>  5 <td>@Html.DisplayFor(model => data.ID)</td>  6 </tr>  7 }  8 //第二块内容  9 @foreach (Data2 dat1 in (ViewBag.Data2 as IEnumerable<Data2>)) 10 { 11 <tr> 12 <td>@Html.DisplayFor(model => data.ID)</td> 13 </tr> 14 } 15 //第三块内容 16 @foreach (Data3 data in (ViewBag.Data3 as IEnumerable<Data3>)) 17 { 18 <tr> 19 <td>@Html.DisplayFor(model => data.ID)</td> 20 </tr> 21 } 22 //第四块内容 23 @foreach (Data4 data in (ViewBag.Data4 as IEnumerable<Data4>)) 24 { 25 <tr> 26 <td>@Html.DisplayFor(model => data.ID)</td> 27 </tr> 28 }
复制代码

2)ViewModel方式(推荐)

什么是ViewModel?ViewModel就是针对视图做的Model,让Model更加适合于View。Data1、Data2、Data3、Data4的数据直接从数据库里取出,然后组装给ViewModel,ViewModel做为整个页面的数据载体进行数据传递:

ViewModel中的伪代码如下所示:

1     public class CnBlogIndex {
2         List<Data> Data1 { get; set; } 3 List<Data> Data2 { get; set; } 4 List<Data> Data3 { get; set; } 5 List<Data> Data4 { get; set; } 6 }

Control中伪代码如下所示:

复制代码
         public ActionResult CnBlogIndex()
         {
             ViewModel.CnBlogIndex CnBlogIndex = new ViewModel.CnBlogIndex();
             CnBlogIndex.Data1 = Data1;
             CnBlogIndex.Data2 = Data2; CnBlogIndex.Data3 = Data3; CnBlogIndex.Data4 = Data4; return View(CnBlogIndex); }
复制代码

View中伪代码如下所示:

复制代码
 1 @model CnBlogIndex
 2 @foreach (var info in Model.Data1)  3  {  4 <tr>  5 <td>info.**</td>  6 </tr>  7  }  8 @foreach (var info in Model.Data2)  9  { 10 <tr> 11 <td>info.**</td> 12 </tr> 13  } 14 @foreach (var info in Model.Data3) 15  { 16 <tr> 17 <td>info.**</td> 18 </tr> 19  } 20 @foreach (var info in Model.Data4) 21  { 22 <tr> 23 <td>info.**</td> 24 </tr> 25 }
复制代码

两种传递数据的方式都可以完成我们的正常工作,但个人更推荐使用ViewModel将一个页面的信息进行聚合,这样虽然多了一些工作量,但可以使整体结构更清晰,同进也更易于维护。

3)使用Tuple类

转载于:https://www.cnblogs.com/xbzhu/p/7459172.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值