SharePoint SPContext.Список на странице пользовательского приложения

StackOverflow https://stackoverflow.com/questions/29030

Вопрос

У меня есть пользовательская страница приложения SharePoint, развернутая в папке _layouts.Это пользовательская "новая форма" для пользовательского типа контента.Во время моего взаимодействия с этой страницей мне нужно будет добавить элемент в свой список.Когда страница загружается в первый раз, я могу использовать SPContext.Current.Список, чтобы увидеть текущий список, с которым я работаю.Но после того, как я заполню свою форму, и форма вернется к себе, а IsPostBack будет иметь значение true, тогда SPContext.Current.Значение List равно null, поэтому я не могу найти список, в который мне нужно добавить свои материалы.

Ожидаемо ли это?

Как я должен сохранять некоторую информацию о моем контекстном списке при обратной передаче?Должен ли я просто заполнить какой-нибудь элемент управления asp: hidden идентификатором guid моего списка, а затем просто извлечь его из него при обратной отправке?Думаю, это кажется безопасным.

FWIW, это Стандартная версия MOSS 2007.

Это было полезно?

Решение

Вообще говоря, я стараюсь копировать любой подход, применяемый группой продуктов, когда хочу добавить свою собственную функциональность.В этом случае они добавляют свои собственные страницы редактирования / просмотра / добавления через само определение списка.

Я создал решение, которому также требовалась собственная пользовательская "Новая" форма, к сожалению, не с открытым исходным кодом, хотя, если вам интересно, вы можете скачать ее, она называется "Помеченные ссылки" (Социальные закладки для SharePoint), и вы можете найти несколько ссылок в моем блоге.

Чтобы дать вам несколько советов, приведенное ниже должно направить вас в правильном направлении:

  1. Создано новое определение списка.
  2. Создан новый тип контента В разделе тип контента вы можете определить свои собственные "FormTemplates", которые ссылаются на шаблон рендеринга, который определяет, что будет отображаться в "Среднем" бите этих форм.
  3. Скопировать стандартный шаблон рендеринга, а затем сделал изменения, которые я нужно.
  4. Завернул все это в решение и развернул.

Мой шаблон рендеринга на самом деле включал переопределенную кнопку "Сохранить", где я выполнил большую часть дополнительной работы, которую мне нужно было выполнить во время сохранения.

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

Другие советы

Я был бы удивлен, если бы вы могли сделать что-то в файле _Layouts, чего вы не можете сделать в шаблоне forms.В вашем распоряжении практически те же технологии.

Глядя на то, как SharePoint работает со списками и страницами макетов (например, "Управление разрешениями" для элемента списка), я вижу, что они передают некоторые переменные через querystrings:?obj={76113B3A-FABA-4389-BC85-4BB2CC5AB423},6,LISTITEM&List={76113B3A-FABA-4389-BC85-4BB2CC5AB423}

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

Я не использую пользовательскую "новую форму", так что это может неприменимо.Я добавил приемник событий к своему пользовательскому типу контента, а затем выполнил свой пользовательский код в событиях ItemAdded или ItemAdding.Этот код срабатывает, когда событие добавляется в список.Вы можете использовать свойства приемника событий, чтобы перейти к родительскому списку, веб-сайту и Site.

Мне бы хотелось думать, что моя проблема здесь "особенная", поскольку я использую пользовательскую форму.Я решил использовать пользовательскую форму, а не пользовательский FormTemplate просто потому, что я делаю много вещей, которые не очень похожи на списки SharePoint (выполнение вызовов ajax для получения информации из стороннего приложения, затем генерация некоторых динамических элементов формы на основе этого результата ajax, затем последующая обработка этих данных при обратной передаче).Я думал, что было бы кошмаром попробовать это в обычном механизме пользовательского шаблона рендеринга.

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

На самом деле, мой простой способ сохранить guid списка в моем скрытом поле был очень малоэффективным способом решения этой конкретной проблемы.Моя главная проблема заключается в том, что я не уверен, почему SPContext просто теряет всю свою полезность, когда я возвращаю сюда, что заставляет меня думать, что я делаю что-то неправильно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top