asp.net MVC RC1 RenderPartial ViewDataDictionary

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

问题是ViewDataDictionary没有在我尝试它的方式中返回视图用户控件中的任何值。

下面的示例代码仅使用匿名对象进行演示,尽管此方法或传递ViewData对象都ViewData

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

  

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

  

为什么这不会返回任何东西?

谢谢你的帮助。

编辑:

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

你有没有尝试过:

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

还有你validationViewData [“Test”]在传递之前是在ViewData中吗? 另请注意,将ViewData传递给部分控件时,保持模型相同非常重要。

缺口

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

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

它可能有点hackish,但它让你通过和一些额外的数据发送模型。

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

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

这样您就可以在一个语句中编写所有内容。 可以在视图中访问KVP:

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

虽然我通过模型传递的内容可以通过Model访问。*

我正在使用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"}); %> 

希望这可以帮助。

在您的主视图中:

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

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

 ViewData["Test"] = "Mark"; 

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