Я успешно создал настраиваемое поле, унаследованное от 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 (). Мы знаем, что можем изменить веб-часть для достижения этой цели, но это не идеальное решение по другим причинам).