6

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

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(即 ViewData["DisplayMessage"])集合中而不需要强类型化用户控件?这是设计使然吗?ViewData 将包含“DisplayMessage”的键是否有意义?

4

2 回答 2

6

方法

ViewData.Eval("DisplayMessage") 

应该为你工作。

于 2008-08-28T06:41:08.170 回答
2

当然,在我创建这个问题后,我在谷歌上搜索了几次后立即找到了答案

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

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

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

于 2008-08-20T21:03:10.070 回答