Веб-элементы управления SharePoint 2010 - значение LookupField не устанавливается при обратной передаче - PullRequest
0 голосов
/ 01 февраля 2011

Я создал пользовательскую форму редактирования в виде простой aspx-страницы в VS2010 (унаследовано от LayoutsPageBase), которая использует элемент управления SharePoint для веб-элементов управления LookupField для отображения раскрывающегося списка значений из пользовательского типа

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

ControlMode установлен так же, как FormContext (хотя я попытался явно установить это для Edit)

Но наДля обратной передачи значение раскрывающегося списка не задано - для индекса выбранного элемента установлено значение -1

Как правильно использовать элемент управления LookupField для получения выбранного значения от пользователя?

Можетэто потому, что я добавляю элементы управления в aspx, а затем устанавливаю идентификатор списка и т. д. из SPContext в событии загрузки страницы?- см. фрагмент кода ниже (не самый красивый, но просто пытающийся заставить его работать в данный момент):

из aspx:

<SharePoint:FileField ID="FileNameText"  InputFieldLabel="Name" runat="server" ControlMode="Display"/><br />
<SharePoint:LookupField ID="FeedType" runat="server" />
<SharePoint:TextField ID="FeedStatus" runat="server"  />

....

в коде загрузки страницы:

if (!IsPostBack)
            {
                SPItem feedFileItem = SPContext.Current.Item;
                FileNameText.ControlMode = SPContext.Current.FormContext.FormMode;
                FileNameText.ListId = SPContext.Current.ListId;
                FileNameText.ItemId = SPContext.Current.ItemId;
                FileNameText.FieldName = "Name";

                FeedType.ControlMode = SPControlMode.Edit;

                FeedType.ListId = SPContext.Current.ListId;
                FeedType.ItemId = SPContext.Current.ItemId;
                FeedType.FieldName = "FeedType";

                FeedStatus.ItemContext = SPContext.Current;
                FeedStatus.RenderContext = SPContext.Current;
                FeedStatus.ControlMode = SPControlMode.Edit;
                FeedStatus.ListId = SPContext.Current.ListId;
                FeedStatus.ItemId = SPContext.Current.ItemId;
                FeedStatus.FieldName = "FeedStatus";
            }

UPDATE

Хорошо, мне удалось заставить мою форму работать, добавив элементы управления в коде в переопределении CreateChildControls- это соответствует большинству примеров, которые я видел в сети.

Но кто-то может объяснить, почему мой подход не сработал и могу ли я сделать все это декларативным способом в aspx

1 Ответ

2 голосов
/ 09 сентября 2011

Во время обратной передачи выбранные значения из списков просто игнорируются, если элемент управления списком не заполнен.Поэтому, если вы выберете пункт 2, а элементы списка будут нулевыми, он просто проигнорирует параметр ответа и не установит свойство Value.Это потому, что ProcessPostData происходит до LoadData.Даже если вы удалите! IsPostBack в методе LoadData, он все равно не будет работать, поскольку ProcessPostData все еще происходит до LoadData, и вы не загрузили список до обработки обратной передачи.это переместит ваш код инициализации в метод EnsureChildControls вашей страницы приложения.

protected override void EnsureChildControls()
{
    base.EnsureChildControls();

    ...
    FeedType.ControlMode = SPControlMode.Edit;

    FeedType.ListId = SPContext.Current.ListId;
    FeedType.ItemId = SPContext.Current.ItemId;
    FeedType.FieldName = "FeedType";  
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...