我已经成功地创建了一个继承自 SPFieldText 的自定义字段,并且很高兴可以完全控制在输入表单上将其呈现为控件。
问题:
在使用 GetFieldValueAsHtml() 呈现字段时,我需要在查询字符串中创建指向带有ListId 和 ListitemID的弹出窗口的链接。
像这样的东西:
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
}
我已经在 fldtypes_Custom.xml 中尝试了 RenderPattern,但是在使用 GetFieldValueAsHtml() 渲染字段时,这也被忽略了;
我是否天真地期待一些不可能的事情?我对任何避免重写 Web 部件的方法持开放态度......或者只是告诉我它无法完成。
(现有的 Web 部件呈现一个网格并调用 GetFieldValueAsHtml()。我们知道我们可以更改 Web 部件来实现这一点,但由于其他原因,这不是一个理想的解决方案)。