Asp.net MVC RC1 RenderPartial ViewDataDictionary
Я пытаюсь передать объект ViewData
с главной страницы на пользовательский элемент управления с помощью ViewDataDictionary
.
Проблема заключается в том, что ViewDataDictionary
не возвращает никаких значений в пользовательском элементе управления, какой бы я ни пытался.
Пример кода ниже использует анонимный объект только для демонстрации, хотя ни этот метод, ни передача объекта ViewData
не работают.
Ниже приведен вспомогательный метод RenderPartial
, который я пытаюсь использовать:
<% Html.RenderPartial("/Views/Project/Projects.ascx", ViewData.Eval("Projects"), new ViewDataDictionary(new { Test = "Mark" })); %>
и, на мой взгляд, пользовательский элемент управления я делаю следующее:
<%= Html.Encode(ViewData["Test"]) %>
Почему это ничего не возвращает?
Спасибо за вашу помощь.
EDIT:
Я могу без проблем получить доступ к строго типизированной модели. это ViewDataDictionary
, который я пытаюсь использовать для передачи, говорит только одно значение за пределами модели...
Ответы
Ответ 1
Вы пробовали:
<% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData); %>
Также вы подтвердили, что ViewData [ "Test" ] находится в ViewData, прежде чем передавать его? Также обратите внимание, что при передаче ViewData в Partial Control важно сохранить модель равной.
Ник
Ответ 2
Это самый чистый способ, который я видел для этого:
<% Html.RenderPartial("/Views/Project/Projects.ascx", Model, new ViewDataDictionary{{"key","value"}});%>
Это может быть немного хаки, но это позволяет вам отправить модель через некоторые дополнительные данные.
Ответ 3
Не знаю, все ли по-прежнему заботятся, но я использовал 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"] %>
В то время как через мою модель можно пройти через модель. *
Ответ 4
Я использую RTM-версию ASP.Net MVC, но с помощью:
<% 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"}); %>
Надеюсь, что это поможет.
Ответ 5
В вашем основном представлении:
<% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData["Projects"]); %>
Либо в вашем контроллере, либо в главном представлении:
ViewData["Test"] = "Mark";
Если вы не указываете словарь данных модели или представления в RenderPartail, он использует те, которые содержатся в отображаемом представлении.