asp.net MVC RC1 RenderPartial ViewDataDictionary

时间:2009-01-30 12:25:15

标签: c# .net asp.net-mvc

我正在尝试使用ViewDataViewDataDictionary对象从母版页传递到视图用户控件。

问题是ViewDataDictionary无法以我尝试的方式返回视图用户控件中的任何值。

以下示例代码仅使用匿名对象进行演示,但此方法或传递ViewData对象均无效。

以下是我正在尝试使用的RenderPartial辅助方法:

<% Html.RenderPartial("/Views/Project/Projects.ascx", ViewData.Eval("Projects"), new ViewDataDictionary(new { Test = "Mark" })); %>

并在我看来用户控制我执行以下操作:

<%= Html.Encode(ViewData["Test"]) %>

为什么这不会返回什么?

感谢您的帮助。

编辑:

我能够毫无问题地传递和访问强类型模型。这是我试图用来传递的ViewDataDictionary只说模型之外的一个值......

5 个答案:

答案 0 :(得分:34)

这是我见过的最好的方法:

<% Html.RenderPartial("/Views/Project/Projects.ascx", Model, new ViewDataDictionary{{"key","value"}});%>

这可能有些过时,但是让你通过AND发送一些额外的数据。

答案 1 :(得分:11)

不知道是否还有人关心,但我使用KeyValuePair作为ViewDataDictionary。

 <% Html.RenderPartial("ItemRow", item, new ViewDataDictionary{
        new KeyValuePair<string, object>("url", url),
        new KeyValuePair<string, object>("count", count),
        new KeyValuePair<string, object>("className", className)
 }); %>

通过这种方式,您可以在一个语句中编写所有内容。可以在视图中访问KVP:

<%= ViewData["url"] %>
<%= ViewData["count"] %>
<%= ViewData["className"] %>

虽然可以通过Model。*

访问我通过模型的内容

答案 2 :(得分:6)

我正在使用ASP.Net MVC的RTM版本,但是:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", new ViewDataDictionary(new {Key = "Some value"})); %>

在部分视图中引用该值时,请尝试以下操作:

<%= ViewData.Eval("Key") %>

这对我来说似乎已经成功了。如果您这样做,它也会起作用:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", new {Key = "Some value"}); %>

希望这有帮助。

答案 3 :(得分:5)

你试过了吗?

<% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData); %>

在传递之前,您是否已经验证了ViewData [“Test”]在ViewData中?另请注意,将ViewData传递给部分控件时,保持模型不变非常重要。

尼克

答案 4 :(得分:1)

在主视图中:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData["Projects"]); %>

在您的控制器或您的主视图中:

ViewData["Test"] = "Mark";

如果您没有在RenderPartail中指定模型或视图数据字典,它将使用包含视图中的模型或视图数据字典。