2010-06-17 35 views
0

我是ASP.NET/C#中的MVC2的新手,如果我誤解了某些內容,請原諒我。我有我的控制器中的代碼類似於:如何引用傳遞給View的單個對象的成員?

var singleInstance = new Person("John"); 
ViewData["myInstance"] = singleInstance; 
return View(); 

所以在我看來,Index.aspx,我希望能夠引用該對象的成員。例如,Person有一個名爲Name的成員,它在構造函數中設置。在視圖中,我想從存儲在ViewData對象中的Person中獲取Person.Name。例如:

<%= ViewData["myInstance"].name %> 

這是行不通的。唯一真正的解決方法,我發現是做這樣的事情:

<% var thePerson = ViewData["myInstance"]; 
print (or whatever the method is) thePerson.Name; 
%> 

任何幫助,將不勝感激......這是如此PHP/Zend框架更容易... 嘆息

回答

0

看看this教程。

真的,你應該(正如Tommy所說)使用返回視圖(foo)將模型對象傳遞給視圖。但是,如果您必須使用ViewData(有時您需要),只需將視圖中的對象恢復爲其原始類型即可。

<%= (ViewData["myInstance"] as Person).name; %> 

你需要轉換,因爲ViewData的僅僅是一個對象字典。它沒有強類型,這就是爲什麼在大多數情況下使用ActionResult直接傳遞給View的原因。

0

這應該可行,但在這種情況下更容易使用強類型視圖(在安全性方面具有良好的優勢,並且使用模型數據更容易修改視圖)。然後,你可以做到這一點在你的控制器:

var singleInstance = new Person("John"); 
return View(singleInstance); 

,這在您的視圖:

<%= html.encode(model.name) %> 

在你的情況,我使用的ViewData對象在某些情況下,你有什麼應該工作。現在,Visual Studio中的IntelliSense不會自動顯示特定ViewData對象的屬性,因爲您可以在ViewData中傳遞「任何內容」。除非在C#中,你必須擁有這個。

<%= ViewData["myInstance"].name; %> 

也許C#ASP.MVC'er能重量就這一個

「anything'-以防萬一有一些對象,你不能在這裏

編輯通過:要評論打印或任何行

您不必調用任何方法來打印任何東西,只需將變量/對象包裝在<%=%>標記中即可。 html.Encode()方法有助於防止XSS攻擊和其他惡性事件。

0

爲什麼不創建一個接受「Person」的強類型視圖?

在控制器

var singleInstance = new Person("John"); 
ViewData.Model = singleInstance; 
return View(); 

在你(強類型)查看

<%= Html.Encode (Model.name) %> 
相關問題