MVC怎么在同一个action返回两个表的数据

Posted code、sky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVC怎么在同一个action返回两个表的数据相关的知识,希望对你有一定的参考价值。

一般返回一个model这样

@model MvcMusicStore.Models.Album 

方法:

 public ActionResult Details(int id)        

{             var album = storeDB.Albums.Find(id);

            return View(album);      

   }

 

这个页面不止一个model,还有其他的,那么

Details/id,仅仅返回这一个return View(album);     我想返回其他model,在这个url里面和方法怎么写

Details/id?type=4,我想再返回类型的model

 

@model MvcMusicStore.Models.Album

@model2 MvcMusicStore.Models.AlbumType

 

如上,控制器里面返回2个model,按照我的理解应该这样

public ActionResult Details(int id,int type)       

{             var album = storeDB.Albums.Find(id);

               var albumtype=storeDB.Albumstype.Find(type);

            return View(album);     这里怎么返回视图,带2个model。这里不会写

   }

第一个做法是:将这两个对象组合成一个对象返回

第二个做法是:使用ViewBag

使用ViewBag

重新建立一个Model,然后将现在的两个Model合并到新添加的Model里面,尽可能的使用强类型

 第一种方法:使用ViewModel概念,即建立一个新的class,将所有model都做为它的属性出现,这里你直接返回这个ViewModel即可,如:

public class UserViewModel{

public User_Info User_Info{get;set;}

public User_Extension User_Extension{get;set;}

}

第二种方法:使用ViewData或者MVC3里的ViewBag都可以

public User_Info User_Info{get;set;}

public User_Extension User_Extension{get;set;}

 这样的话写回数据时就绑定不上了吧?

viewdata

viewbage

不需要返回两个model。你只需要如下:

public ActionResult Details(int id,int type)       

{             var album = storeDB.Albums.Find(id);

               var albumtype=storeDB.Albumstype.Find(type);

                ViewBag.albumtype = albumtype;

            return View(album);     

   }

 

View中:

@model Album

@{

Albumstype albumtype = ViewBag.albumtype

}

是的,快捷的办法就是ViewBag就解决了,但是从设计角度去理解的话,还是用ViewModel,将所有model都做为ViewModel的属性出现,最后返回ViewModel就行了。

两种方式 

1:使用ViewBag 把另外一个Model存放进ViewBag中 ViewBag.Model=model2,在View页面取值       

var mode2= ViewBag.model2 as  BadDebt;

2:使用ViewModel  最好是把你需要的字段和你可能需要的字段写进一个自定的Model类中,返回给页面,这样就可以通过一个Model实现了你的需求

以上是关于MVC怎么在同一个action返回两个表的数据的主要内容,如果未能解决你的问题,请参考以下文章

mvc4 如何返回Json数据并且 前台中怎么取它后台返回的数据

spring3 mvc 中怎么从当前action跳到另一个action中

mvc return View() action 参数

struts中的action是控制层,为啥不是业务层呢?控制层和业务层有啥区别?怎么样分辨呢?

Asp.net mvc 使用Ajax调用Action 返回数据。

asp.net mvc 使用Ajax调用Action 返回数据