У меня есть настраиваемая страница приложения SharePoint, развернутая в папке _layouts. Это настраиваемая «новая форма» для настраиваемого типа контента. Во время взаимодействия с этой страницей мне нужно будет добавить элемент в свой список. Когда страница загружается впервые, я могу использовать SPContext.Current.List, чтобы увидеть текущий список, с которым я работаю. Но после того, как я заполнил свою форму и форма отправилась обратно на себя и IsPostBack верен, тогда SPContext.Current.List имеет значение null, поэтому я не могу найти список, в который мне нужно добавить свои данные.
Ожидается ли это?
Как мне сохранить некоторую информацию о моем списке контекста во время обратной передачи? Должен ли я просто заполнить элемент управления asp: hidden с помощью guid моего списка, а затем просто вытащить его из него при обратной передаче? Думаю, это кажется безопасным.
FWIW, это стандартная версия MOSS 2007.





Я не использую специальную «новую форму», поэтому это может не применяться. Я добавил приемник событий к своему настраиваемому типу контента, а затем ввел свой собственный код в события ItemAdded или ItemAdding. Этот код срабатывает, когда событие добавляется в список. Вы можете использовать свойства приемника событий, чтобы перейти к родительскому списку, веб-сайту и сайту.
Вообще говоря, я стараюсь копировать любой подход, который использовала группа продуктов, когда хочу добавить свою собственную функциональность. В этом случае они добавляют свои собственные страницы редактирования / просмотра / добавления через само определение списка.
Я создал решение, для которого также требовалась собственная настраиваемая форма «Новая», к сожалению, не с открытым исходным кодом, хотя, если вам интересно, вы можете загрузить ее под названием «Tagged Links» (социальные закладки для SharePoint), и вы можете найти некоторые ссылки на моем блог.
Чтобы дать вам несколько советов и подсказок, следующее должно направить вас в правильном направлении:
Мой шаблон рендеринга на самом деле включал переопределенную кнопку «Сохранить», где я проделал большую часть дополнительной работы, которую мне нужно было сделать во время сохранения.
В любом случае, на мой взгляд, это немного слишком много, но я думаю, что это наиболее близко соответствует стандартному подходу, принятому разработчиками продукта. Дайте мне знать, если вам нужны более подробные сведения, и я посмотрю, смогу ли я составить пошаговую публикацию в блоге, но, надеюсь, это поможет вам в правильном направлении.
Мне бы хотелось думать, что моя проблема здесь "особенная", поскольку я использую настраиваемую форму. Я решил использовать настраиваемую форму, а не настраиваемый шаблон формы просто потому, что я делаю много вещей, которые не очень похожи на списки SharePoint (выполняю вызовы ajax для получения информации из стороннего приложения, а затем генерирую некоторые элементы динамической формы на основе этот результат ajax, а затем последующая обработка этих данных при обратной передаче). Я подумал, что будет кошмаром попробовать это в обычном механизме настраиваемого шаблона рендеринга.
Я также не думаю, что могу предоставить объявления настраиваемых форм в самом определении списка, потому что у меня есть несколько типов содержимого, связанных с этим списком, и каждый тип содержимого имеет свою собственную настраиваемую форму (другой тип, к счастью, намного проще).
На самом деле, мой простой способ сохранить список guid в моем скрытом поле был очень малоэффективным способом решения этой конкретной проблемы. Меня больше всего беспокоит то, что я не уверен, почему SPContext просто теряет всю свою полезность, когда я делаю обратную передачу здесь, что заставляет меня думать, что я что-то делаю не так.
Я был бы удивлен, если бы вы могли сделать что-то в файле _Layouts, чего нельзя сделать в шаблоне форм. В вашем распоряжении почти такие же технологии.
Глядя на то, как SharePoint работает со страницами ListItems и Layouts (например, «Управление разрешениями» для элемента списка), я вижу, что они передают некоторые переменные через строки запроса: ? obj = {76113B3A-FABA-4389-BC85-4BB2CC5AB423}, 6, LISTITEM & List = {76113B3A-FABA-4389-BC85-4BB2CC5AB423}
Возможно, они каждый раз программно получают контекст, используя эти значения.