2011-11-02 109 views
8

我想從控制器動作傳遞兩個值到asp.net MVC 3 Razor視圖。我做這樣的行動方法:傳遞匿名對象來查看

var model = new { reportid = rid, refno = refernumber}; 
return View(model); 

,但是當我嘗試訪問它,鑑於這樣的:

@Model.reportid 

我得到的,對象不包含財產reportid

如何我可以傳遞多個值而不使用viewbag?

+0

使用viewbag或創建一個視圖模型 – RickAndMSFT

回答

15

那麼,我強烈建議你使用ViewModel類。但是,如果由於某種原因,你有額外的視圖模型類的恐懼,你可以使用一個叫做元組

var model = Tuple.Create(firstObject, secondObject) 

,然後你的看法將是類型元組的C#的特徵,例如

@model Tuple<int, string> 

和你可以像這樣訪問它們

@Model.Item1 

然後你可以恭喜你自己,你已經取得了很好的隱藏含義:)

+1

我喜歡的東西這麼醜怎麼可以這麼美:) –

3

您正在向視圖傳遞匿名對象,但匿名對象在它們被定義的程序集內部,因此您無法這樣做。

如果你不想定義自己的模型或使用ViewState和ViewBag,並仍然想使用匿名對象 - this後會對你有幫助。

2

完成此任務的另一種方法是使用ExpandoObject

dynamic model = new System.Dynamic.ExpandoObject(); 
model.reportid = 123 
model.refno = 456; 

設置視圖模型類型dynamic

@model dynamic 

@Model.reportid 
@Model.refno