asp.net MVC RC1 RenderPartial ViewDataDictionary - PullRequest
21 голосов
/ 30 января 2009

Я пытаюсь передать объект 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, который я пытаюсь использовать, чтобы передать, скажем, только одно значение вне модели ...

Ответы [ 5 ]

34 голосов
/ 12 апреля 2010

Это самый аккуратный способ, который я видел, чтобы сделать это:

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

Это может быть немного хакерски, но это позволит вам отправить модель через И некоторые дополнительные данные.

11 голосов
/ 17 февраля 2010

Не знаю, беспокоится ли кто-нибудь, но я использовал 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"] %>

Хотя то, что я прошел через модель, доступно через Модель. *

6 голосов
/ 24 марта 2009

Я использую 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 голосов
/ 30 января 2009

Вы пробовали:

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

Также вы проверили, что ViewData ["Test"] находится в ViewData, прежде чем передать его? Также обратите внимание, что при передаче ViewData в Partial Control важно, чтобы модель оставалась неизменной.

Ник

1 голос
/ 30 января 2009

На вашем главном экране:

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

В вашем контроллере или на главном экране:

ViewData["Test"] = "Mark";

Если вы не укажете модель или словарь данных представления в RenderPartail, он будет использовать те из представленного содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...