Интеллектуальный указатель является подобным указателю типом с некоторой дополнительной функциональностью, например, автоматическим освобождением памяти, подсчетом ссылок и т.д.
, Маленькое введение доступно на Интеллектуальных указателях страницы - Что, Да ведь Который? .
Один из простого типа интеллектуального указателя std::auto_ptr
(глава 20.4.5 стандарта C++), который позволяет освобождать память автоматически, когда это из объема и который более устойчив, чем простое использование указателя, когда исключения выдаются, хотя менее гибкий.
Другой удобный тип boost::shared_ptr
, который реализует подсчет ссылок и автоматически освобождает память, когда никакие ссылки на объект не остаются. Это помогает утечкам памяти предотвращения и просто в использовании для реализации RAII.
Предмет покрыт подробно в книге "Шаблоны C++: полное руководство" David Vandevoorde, Nicolai M. Josuttis , глава Глава 20. Интеллектуальные указатели. Некоторые темы покрыли:
RenderPartial принимает другой параметр, который является просто ViewDataDictionary. Вы почти у цели, просто назовите это так:
Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary { { "index", index } }
);
Обратите внимание, что это переопределит ViewData по умолчанию, которые по умолчанию имеют все ваши другие представления. Если вы добавляете что-либо в ViewData, этого не будет в этом новом словаре, который вы передаете в частичное представление.
Думаю, это должно сработать. Нет?
ViewData["currentIndex"] = index;
Создайте другой класс, содержащий ваш строго типизированный класс.
Добавьте новый материал в класс и верните его в представление.
Затем в представлении убедитесь, что вы унаследовали свой новый класс и изменили биты кода, которые теперь будут ошибочными. а именно ссылки на ваши поля.
Надеюсь, это поможет. Если нет, дайте мне знать, и я отправлю конкретный код.
Самый простой способ передать дополнительные данные - это добавить данные к существующим ViewData для представления, как отмечает @Joel Martinez. Однако, если вы не хотите загрязнять свои ViewData, RenderPartial имеет метод, который принимает три аргумента, а также версию с двумя аргументами, которую вы показываете. Третий аргумент - это ViewDataDictionary. Вы можете создать отдельный ViewDataDictionary только для своего партиала, содержащий только дополнительные данные, которые вы хотите передать.