2008-08-20 143 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集合中。

我真的需要停下来回答我自己的问题:(