代码之家  ›  专栏  ›  技术社区  ›  Ryan Eastabrook

Asp.net MVC用户控件视图数据

  •  7
  • Ryan Eastabrook  · 技术社区  · 18 年前

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

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

    在我的Message控件上,我有:

    <%= 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”的键,这难道没有意义吗?

    2 回复  |  直到 7 年前
        1
  •  6
  •   Robotnik    13 年前

    方法

    ViewData.Eval("DisplayMessage") 
    

    应该为你工作。

        2
  •  2
  •   Ryan Eastabrook    18 年前

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

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

    显然,这是由于包装器类造成的。即便如此,默认情况下,传递的任何属性都应该添加到ViewData集合中。

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