ASP.NET MVC用户控件视图数据

7

当控制器根据模型呈现视图时,您可以使用索引器(即ViewData [“Property”])从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 %>

为什么不给ViewData(即ViewData [“DisplayMessage”])集合添加DisplayMessage属性,而不强制对用户控件进行类型定义?这是设计如此吗?ViewData中包含“DisplayMessage”键似乎很合理?
2个回答

6
方法
ViewData.Eval("DisplayMessage") 

应该适用于您。

2
当然,在我创建这个问题后,经过更多的谷歌搜索后,我立即找到了答案。

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

显然,这是由于包装类的原因。即便如此,似乎传递的任何属性都应默认添加到 ViewData 集合中。
我真的需要停止回答自己的问题 :(

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接