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

时间:2021-11-06 07:58:22

一般返回一个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实现了你的需求