Asp.net MVC用户控件ViewData

时间:2008-08-20 20:46:24

标签: asp.net asp.net-mvc viewdata viewusercontrol

当控制器基于模型呈现视图时,您可以使用索引器从ViewData集合中获取属性(即ViewData [“Property”])。但是,我有一个共享用户控件,我尝试使用以下方法调用:

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

在我的Message控件上我有这个:

<%= 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(即ViewData [“DisplayMessage”])集合中?这是设计的吗? ViewData是否包含“DisplayMessage”键?

是否有意义?

2 个答案:

答案 0 :(得分:6)

方法

ViewData.Eval("DisplayMessage") 

应该适合你。

答案 1 :(得分:2)

当然,在我创建此问题后,我会在Google上再搜索几次后立即找到答案

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

显然这是因为包装类而发生的。即便如此,似乎任何传递的属性都应该默认添加到ViewData集合中。

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