【问题标题】:Asp.net MVC User Control ViewDataAsp.net MVC 用户控件 ViewData
【发布时间】:2010-09-06 08:03:42
【问题描述】:

当控制器基于模型呈现视图时,您可以使用索引器从 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”的键是否有意义?

【问题讨论】:

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


    【解决方案1】:

    方法

    ViewData.Eval("DisplayMessage") 
    

    应该适合你。

    【讨论】:

      【解决方案2】:

      当然,在我提出这个问题之后,我在 Google 上再搜索几遍后,我会立即找到答案

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

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

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

      【讨论】:

        猜你喜欢
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2012-01-22
        • 2010-10-02
        • 2010-11-28
        • 1970-01-01
        • 2010-09-08
        • 2010-09-06
        相关资源
        最近更新 更多