一般返回一個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實現了你的需求