我正在尝试使用ViewData
将ViewDataDictionary
对象从母版页传递到视图用户控件。
问题是ViewDataDictionary
无法以我尝试的方式返回视图用户控件中的任何值。
以下示例代码仅使用匿名对象进行演示,但此方法或传递ViewData
对象均无效。
以下是我正在尝试使用的RenderPartial
辅助方法:
<% Html.RenderPartial("/Views/Project/Projects.ascx", ViewData.Eval("Projects"), new ViewDataDictionary(new { Test = "Mark" })); %>
并在我看来用户控制我执行以下操作:
<%= Html.Encode(ViewData["Test"]) %>
为什么这不会返回什么?
感谢您的帮助。
编辑:
我能够毫无问题地传递和访问强类型模型。这是我试图用来传递的ViewDataDictionary
只说模型之外的一个值......
答案 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中指定模型或视图数据字典,它将使用包含视图中的模型或视图数据字典。