MVC中,首页内容比较多,控制器如何传数据给视图

时间:2020-11-30 19:53:03
首页,像门户网站,数据内容很多,每一小块数据(控制器)怎么传输到对应(视图)位置
公共的可以用分部视图
非公共的,我现在想到的办法是定义的复杂视图模型,
    public class ProductsListViewModel
    {
        public IEnumerable<Product>  Products { get; set; }
        public PagingInfo PagingInfo { get; set; }
        public string CurrentCategory { get; set; }
    }


还有就是直接用viewbag比如view.productlist,view.newslist

不知道是不是这样做,第一次用MVC

16 个解决方案

#1


你首先要明白,控制器不是用来传输数据的,它是根据路由指向到某个视图,再由视图去加载数据

#2


引用 1 楼 liuchaolin 的回复:
你首先要明白,控制器不是用来传输数据的,它是根据路由指向到某个视图,再由视图去加载数据

接着说重点啊

#3


引用 1 楼 liuchaolin 的回复:
你首先要明白,控制器不是用来传输数据的,它是根据路由指向到某个视图,再由视图去加载数据

用视图加载数据???
不是说控制器从模型中获取数据,组织以后传入视图中显示么

#4


重点是
<%@ Import namespace="某个模型数据" %>

<%foreach (var a in ViewData.Model) {%>

<%}%>

<%foreach (var a in ViewData.Model2) {%>

<%}%>
....

#5


引用 4 楼 liuchaolin 的回复:
重点是
<%@ Import namespace="某个模型数据" %>

<%foreach (var a in ViewData.Model) {%>

<%}%>

<%foreach (var a in ViewData.Model2) {%>

<%}%>
....

有点不对劲,你这里到底是某个模型数据,有还是有了视图包

#6


引用 5 楼 zhouyongli41 的回复:
Quote: 引用 4 楼 liuchaolin 的回复:

重点是
<%@ Import namespace="某个模型数据" %>

<%foreach (var a in 某个模型数据.Model) {%>

<%}%>

<%foreach (var a in 某个模型数据.Model2) {%>

<%}%>
....

有点不对劲,你这里到底是某个模型数据,有还是有了视图包

是不是应该这样,就是用复杂的视图模型

#7


复杂的和VIewBag的都可以~

我不喜欢用复杂的,原因是多了一个类 MVC中,首页内容比较多,控制器如何传数据给视图

喜欢用VIewBag,然后在View中做类型转换接着foreach

#8


Insus.NET刚开始学习ASP.NET MVC时,也差点想不过来。控制器可作为视图的操作(Action),也可以作为服务端的一个方法,函数。
因此,你可以创建很多个Action,每个Action可处理不同的数据。

#9


引用 8 楼 insus 的回复:
Insus.NET刚开始学习ASP.NET MVC时,也差点想不过来。控制器可作为视图的操作(Action),也可以作为服务端的一个方法,函数。
因此,你可以创建很多个Action,每个Action可处理不同的数据。

感觉用了这么多action,开发起来会不会很麻烦,而且也没有重用性的(不是公共块)

#10


我也是LZ那么定义。。。没发现啥问题。。。

#11


public class IndexVModel
......

#12


我是用多个VIewBag···

#13


公共部分使用分布使用,非公用的,定义一个复杂一点的ViewModel吧。

//ToDo
public class HomeModels{
     public IList<Hotxxx>{get;set;}
     ......
}

#14


门户网首页的版块很多,每块得用上一个action,相同的模版就做一个公共的模块传不同的参数,在后台得到想要的数据,在相应的view中绑定好数据, 然后在首页在相应的位置填上相应的访问视图代码:@Html.action("action","controll",new{})

#15


要麼使用一個viewmodel 裏面可以放多個DataTable list啊 什麼的 反到view中
要麼就用多個viewbag 
推薦第一種

#16


方法多的是
第一种:定义复杂模型
第二种:直接在视图里从BLL处获取数据

    IBLL.INewsService IBLL = new BLL.NewsService();
    foreach (var item in IBLL.LoadEntities(p => p.classCode == 100).Take(10).ToList())
    { 
    
    
    }


第三种:直接将控制器做为对象传向视图,在控制器处有些对象用PUBLIC定义,然后在视图处就可以直接取数据了

控制器:
        public INewsService _IService;
        public ActionResult View()
        {
            _IService = new BLL.NewsService();
            return View(this);
        }

视图

@model CHR.Controllers.HomeController

@foreach (var item in Model._IService.LoadEntities(p => p.houseID == 100))
{


}



#1


你首先要明白,控制器不是用来传输数据的,它是根据路由指向到某个视图,再由视图去加载数据

#2


引用 1 楼 liuchaolin 的回复:
你首先要明白,控制器不是用来传输数据的,它是根据路由指向到某个视图,再由视图去加载数据

接着说重点啊

#3


引用 1 楼 liuchaolin 的回复:
你首先要明白,控制器不是用来传输数据的,它是根据路由指向到某个视图,再由视图去加载数据

用视图加载数据???
不是说控制器从模型中获取数据,组织以后传入视图中显示么

#4


重点是
<%@ Import namespace="某个模型数据" %>

<%foreach (var a in ViewData.Model) {%>

<%}%>

<%foreach (var a in ViewData.Model2) {%>

<%}%>
....

#5


引用 4 楼 liuchaolin 的回复:
重点是
<%@ Import namespace="某个模型数据" %>

<%foreach (var a in ViewData.Model) {%>

<%}%>

<%foreach (var a in ViewData.Model2) {%>

<%}%>
....

有点不对劲,你这里到底是某个模型数据,有还是有了视图包

#6


引用 5 楼 zhouyongli41 的回复:
Quote: 引用 4 楼 liuchaolin 的回复:

重点是
<%@ Import namespace="某个模型数据" %>

<%foreach (var a in 某个模型数据.Model) {%>

<%}%>

<%foreach (var a in 某个模型数据.Model2) {%>

<%}%>
....

有点不对劲,你这里到底是某个模型数据,有还是有了视图包

是不是应该这样,就是用复杂的视图模型

#7


复杂的和VIewBag的都可以~

我不喜欢用复杂的,原因是多了一个类 MVC中,首页内容比较多,控制器如何传数据给视图

喜欢用VIewBag,然后在View中做类型转换接着foreach

#8


Insus.NET刚开始学习ASP.NET MVC时,也差点想不过来。控制器可作为视图的操作(Action),也可以作为服务端的一个方法,函数。
因此,你可以创建很多个Action,每个Action可处理不同的数据。

#9


引用 8 楼 insus 的回复:
Insus.NET刚开始学习ASP.NET MVC时,也差点想不过来。控制器可作为视图的操作(Action),也可以作为服务端的一个方法,函数。
因此,你可以创建很多个Action,每个Action可处理不同的数据。

感觉用了这么多action,开发起来会不会很麻烦,而且也没有重用性的(不是公共块)

#10


我也是LZ那么定义。。。没发现啥问题。。。

#11


public class IndexVModel
......

#12


我是用多个VIewBag···

#13


公共部分使用分布使用,非公用的,定义一个复杂一点的ViewModel吧。

//ToDo
public class HomeModels{
     public IList<Hotxxx>{get;set;}
     ......
}

#14


门户网首页的版块很多,每块得用上一个action,相同的模版就做一个公共的模块传不同的参数,在后台得到想要的数据,在相应的view中绑定好数据, 然后在首页在相应的位置填上相应的访问视图代码:@Html.action("action","controll",new{})

#15


要麼使用一個viewmodel 裏面可以放多個DataTable list啊 什麼的 反到view中
要麼就用多個viewbag 
推薦第一種

#16


方法多的是
第一种:定义复杂模型
第二种:直接在视图里从BLL处获取数据

    IBLL.INewsService IBLL = new BLL.NewsService();
    foreach (var item in IBLL.LoadEntities(p => p.classCode == 100).Take(10).ToList())
    { 
    
    
    }


第三种:直接将控制器做为对象传向视图,在控制器处有些对象用PUBLIC定义,然后在视图处就可以直接取数据了

控制器:
        public INewsService _IService;
        public ActionResult View()
        {
            _IService = new BLL.NewsService();
            return View(this);
        }

视图

@model CHR.Controllers.HomeController

@foreach (var item in Model._IService.LoadEntities(p => p.houseID == 100))
{


}