Передайте дополнительный ViewData частичному представлению со строгим контролем типов

Интеллектуальный указатель является подобным указателю типом с некоторой дополнительной функциональностью, например, автоматическим освобождением памяти, подсчетом ссылок и т.д.

, Маленькое введение доступно на Интеллектуальных указателях страницы - Что, Да ведь Который? .

Один из простого типа интеллектуального указателя std::auto_ptr (глава 20.4.5 стандарта C++), который позволяет освобождать память автоматически, когда это из объема и который более устойчив, чем простое использование указателя, когда исключения выдаются, хотя менее гибкий.

Другой удобный тип boost::shared_ptr , который реализует подсчет ссылок и автоматически освобождает память, когда никакие ссылки на объект не остаются. Это помогает утечкам памяти предотвращения и просто в использовании для реализации RAII.

Предмет покрыт подробно в книге "Шаблоны C++: полное руководство" David Vandevoorde, Nicolai M. Josuttis , глава Глава 20. Интеллектуальные указатели. Некоторые темы покрыли:

169
задан John Saunders 2 February 2014 в 15:47
поделиться

4 ответа

RenderPartial принимает другой параметр, который является просто ViewDataDictionary. Вы почти у цели, просто назовите это так:

Html.RenderPartial(
      "ProductImageForm", 
       image, 
       new ViewDataDictionary { { "index", index } }
); 

Обратите внимание, что это переопределит ViewData по умолчанию, которые по умолчанию имеют все ваши другие представления. Если вы добавляете что-либо в ViewData, этого не будет в этом новом словаре, который вы передаете в частичное представление.

239
ответ дан 23 November 2019 в 20:49
поделиться

Думаю, это должно сработать. Нет?

ViewData["currentIndex"] = index;
8
ответ дан 23 November 2019 в 20:49
поделиться

Создайте другой класс, содержащий ваш строго типизированный класс.

Добавьте новый материал в класс и верните его в представление.

Затем в представлении убедитесь, что вы унаследовали свой новый класс и изменили биты кода, которые теперь будут ошибочными. а именно ссылки на ваши поля.

Надеюсь, это поможет. Если нет, дайте мне знать, и я отправлю конкретный код.

6
ответ дан 23 November 2019 в 20:49
поделиться

Самый простой способ передать дополнительные данные - это добавить данные к существующим ViewData для представления, как отмечает @Joel Martinez. Однако, если вы не хотите загрязнять свои ViewData, RenderPartial имеет метод, который принимает три аргумента, а также версию с двумя аргументами, которую вы показываете. Третий аргумент - это ViewDataDictionary. Вы можете создать отдельный ViewDataDictionary только для своего партиала, содержащий только дополнительные данные, которые вы хотите передать.

4
ответ дан 23 November 2019 в 20:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: