0

我已经成功地创建了一个继承自 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 部件来实现这一点,但由于其他原因,这不是一个理想的解决方案)。

4

2 回答 2

0

不确定这是否适用于 SharePoint 2007,但使用 SharePoint 2010,可以使用 SPContext.Current.ListItem 轻松获取当前显示的 ListItem。

于 2010-11-14T00:12:51.053 回答
0

对于任何偶然发现这一点的人,我确认我的目标是不可能的。

我们被迫在 Web 部件中进行更改以实现此级别的自定义。如问题中所述,现有 Web 部件呈现网格并调用 GetFieldValueAsHtml()。

于 2012-12-12T22:22:27.177 回答