Установка элемента ViewData в Partial для чтения в View - PullRequest
0 голосов
/ 15 июля 2009

У меня есть представление, которое я называю RenderPartial.

В Частичном пользовательском контроле я установил ViewData["IsTextAreaVisible"] = true;

В моем виде после вызова RenderPartial я проверяю значение ViewData["IsTextAreaVisible"].

Даже если пользовательский контроль установил его, View считает, что он нулевой.

Это ошибка или есть лучший подход?

Спасибо

Ответы [ 4 ]

3 голосов
/ 15 июля 2009

Это работает, как задумано.

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

1 голос
/ 15 июля 2009

Я думаю, что метод RenderPartial фактически создает новый словарь из объекта, который вы передаете как ViewData. Поскольку словарь отличается, оригинал не будет содержать новых значений, которые вы добавили в него.

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

0 голосов
/ 15 июля 2009

Продолжая рассказ Брэда, сделайте это на стороне клиента с помощью JavaScript. Используя JQuery, вы можете узнать, есть ли какие-либо видимые текстовые поля на странице, и инициализировать клиент следующим образом.

$(document).ready(function() {
  if ($("input[@type=text]:visible").length > 0) {
    // inject JS file and init tinyMCE.
    $.getScript('<%= ResolveUrl("~/Scripts/tinymce/tiny_mce.js")' %>, function() {
      // TODO: call tinyMCE's init function here
    });
  }
});

Это инициализирует его, только если есть входы, которые видны.

См. http://docs.jquery.com/Ajax/jQuery.getScript для ограничений на getScript

Редактировать: отредактировано, чтобы расширить его на основе комментария Джона. Обратите внимание, что я не запускал это пересмотренное редактирование в браузере, поэтому возможен сбой или два. Кроме того, это должно быть действительно помечено с помощью jQuery, если вы принимаете это решение.

0 голосов
/ 15 июля 2009

Обмен данными между компонентами представления выглядит для меня как ошибка проектирования. Представление (полное или частичное) предназначено только для пассивного и тупого отображения состояния модели. Все проверки, вызовы и настройка значений должны выполняться в моделях / контроллерах. Я бы посоветовал вам переосмыслить архитектуру. Даже если это покажется вам хорошим и подходящим, есть вероятность, что рано или поздно вам придется переделать этот кусок кода.

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