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實現了你的需求


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM