Asp.net MVC 用户控件 ViewData
-
09-06-2019 - |
题
当控制器基于模型渲染视图时,您可以使用索引器从 ViewData 集合中获取属性(即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 (即ViewData["DisplayMessage"]) 集合无需强类型用户控件?这是设计使然吗?ViewData 包含“DisplayMessage”的键是否有意义?
解决方案
方法
ViewData.Eval("DisplayMessage")
应该为你工作。
其他提示
当然,在我创建这个问题后,我在谷歌上进行了几次搜索后立即找到了答案
http://forums.asp.net/t/1197059.aspx
显然这是因为包装类而发生的。即便如此,默认情况下传递的任何属性似乎都应该添加到 ViewData 集合中。
我真的需要停止回答自己的问题:(
不隶属于 StackOverflow