2008-08-20 147 views
5

當控制器根據模型呈現視圖時,可以使用索引器(即ViewData [「Property」])從ViewData集合中獲取屬性。但是,我有我嘗試使用調用下面的一個共享的用戶控件:Asp.net MVC用戶控件ViewData

return View("Message", new { DisplayMessage = "This is a test" }); 

,並在我的消息控件我有這樣的:

<%= ViewData["DisplayMessage"] %> 

我認爲這會正確地呈現DisplayMessage,但是,返回null。擺弄周圍的大劑量後,我終於以創建「MessageData」級強烈輸入我的用戶控件:

public class MessageControl : ViewUserControl<MessageData> 

現在這個調用工作:

return View("Message", new MessageData() { DisplayMessage = "This is a test" }); 

並且可以顯示像這樣的:

<%= ViewData.Model.DisplayMessage %> 

爲什麼不DisplayMessage屬性添加到的ViewData(即計算機[「DisplayMessage」。)收集不強類型用戶控件?這是設計嗎? ViewData是否包含「DisplayMessage」的鍵是否有意義?

回答

6

的方法

ViewData.Eval("DisplayMessage") 

應該爲你工作。

2

當然以後我創建這個問題,我馬上找到答案了幾個搜索後谷歌

http://forums.asp.net/t/1197059.aspx

顯然,這是因爲包裝類的。即使如此,似乎任何傳遞的屬性都應默認添加到ViewData集合中。

我真的需要停下來回答我自己的問題:(