Как указать ListFieldIterator на веб-каталог, когда ControlMode = Display? - PullRequest
0 голосов
/ 30 апреля 2010

У меня есть пользовательская страница со следующим ListFieldIterator :

<SharePoint:ListFieldIterator runat="server" ControlMode="Display" OnInit="listFieldIterator_Init" />

Вот событие Init:

    protected void listFieldIterator_Init(object sender, EventArgs e)
    {
        ListFieldIterator listFieldIterator = sender as ListFieldIterator;
        SPContext current = SPContext.Current;
        SPFieldUrlValue value = new SPFieldUrlValue(current.ListItem[SPBuiltInFieldId.URL].ToString());
        Uri uri = new Uri(value.Url);
        using (SPWeb web = current.Site.OpenWeb(uri.AbsolutePath))
        {
            SPListItem item = web.GetListItem(uri.PathAndQuery);
            if (null != item)
            {
                listFieldIterator.ItemContext = SPContext.GetContext(this.Context, item.ID, item.ParentList.ID, web);
            }
        }
    }

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

Не удалось отобразить столбец "Заголовок". из-за ошибки в "Single строка текста "Тип поля управления. См. подробности в лог. Сообщение об исключении: Список не существует Страница, которую вы выбрано содержит список, который не существовать. Возможно, он был удален другой пользователь ..

Если я изменю ControlMode на Edit, значения отображаются правильно. Так как мне заставить его работать в режиме дисплея?

1 Ответ

2 голосов
/ 03 мая 2010

Я провел еще несколько исследований здесь , здесь и здесь . Последние два привели меня к созданию следующего пользовательского элемента управления, который правильно отображает ListFieldIterator в режиме отображения:

public class RecursiveListFieldIterator : ListFieldIterator
{
    protected override void Render(System.Web.UI.HtmlTextWriter output)
    {
        SPWeb web = SPControl.GetContextWeb(this.Context);
        SPControl.SetContextWeb(this.Context, this.ItemContext.Web);
        base.Render(output);
        SPControl.SetContextWeb(this.Context, web);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...