Получить ссылку на текущий Listitem из пользовательского SPField - PullRequest
0 голосов
/ 12 апреля 2010

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

Проблема:

Мне нужно создать ссылку на всплывающее окно с ListId и ListitemID в строке запроса при рендеринге поля с использованием GetFieldValueAsHtml ().

Примерно так:

public class CustomField : SPFieldText
{
    public CustomField (SPFieldCollection fields, string fieldName)
        : base(fields, fieldName)
    {
    }

    public CustomField (SPFieldCollection fields, string typeName, string displayName)
        : base(fields, typeName, displayName)
    {
    }

    public override string GetFieldValueAsHtml(object value)
    {
        return string.Format(
            "javascript:window.open('{0}/_layouts/Popup.aspx?ListId={1}&ItemId={2}','Popup','status=0,scrollbars=0,titlebar=0,resizable=1,toolbar=0,location=0,width=600,height=500');return false;",
            SPContext.Current.Web.ServerRelativeUrl.TrimEnd('/'), 
            LISTID, LISTITEM.ID
            );
     }

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

// None of these properties are invoked when rendering the field as above    
public class CustomFieldControl : TextField
{
     public override object ItemFieldValue
     public override object ListItemFieldValue
     public override string Text
     public override object Value
}

Я экспериментировал с RenderPattern в fldtypes_Custom.xml, но, опять же, это также игнорируется при рендеринге поля с использованием GetFieldValueAsHtml ();

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

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

Ответы [ 2 ]

0 голосов
/ 13 декабря 2012

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

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

0 голосов
/ 14 ноября 2010

Не уверен, что это будет работать с SharePoint 2007, но с SharePoint 2010 можно легко получить отображаемый в настоящий момент ListItem с помощью SPContext.Current.ListItem.

...