Asp.net MVC用户控件ViewData

Asp.net MVC用户控件ViewData

Asp.net MVC User Control ViewData

当控制器基于模型渲染视图时,您可以使用索引器从ViewData集合中获取属性(即ViewData [" Property"])。 但是,我有一个共享的用户控件,尝试使用以下命令进行调用:

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

在我的消息控件上,我有这个:

1
<%= ViewData["DisplayMessage"] %>

我认为这将正确呈现DisplayMessage,但是将返回null。 经过大量的修改后,我最终创建了一个" MessageData"类,以强烈键入我的用户控件:

1
public class MessageControl : ViewUserControl<MessageData>

现在,此调用有效:

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

可以这样显示:

1
<%= ViewData.Model.DisplayMessage %>

如果不强行键入用户控件,为什么不将DisplayMessage属性添加到ViewData(即ViewData [" DisplayMessage"])集合中? 这是设计使然吗? ViewData包含" DisplayMessage"的键是否有意义?


方法

1
ViewData.Eval("DisplayMessage")

应该为您工作。


当然,在我提出此问题后,我在Google上进行了几次搜索后便立即找到了答案

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

显然,这是由于包装器类而发生的。 即使这样,默认情况下,似乎所有传递的属性都应添加到ViewData集合中。

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


推荐阅读