Sharepoint RichImageField设置默认图像

时间:2009-08-17 18:40:00

标签: sharepoint sharepoint-branding

在我的自定义页面布局中,我声明了一个RichImageField

<PublishingWebControls:RichImageField id="InteriorHeaderImage" FieldName="InteriorHeaderImage" InputFieldLabel="Header Image"  runat="server" DisplayWidth="960" DisplayHeight="242"  />

我正在试图弄清楚如何设置默认图像,以便即使第一次使用布局创建页面,控件也始终显示图像。

理想情况下,我想要一个声明式方法,例如:

<PublishingWebControls:RichImageField id="InteriorHeaderImage" DefaultImageURL="[it should be this easy]" />

似乎控件的value属性被分配了一个ImageFieldValue对象,我可能想知道如何设置代码隐藏,但这种方法似乎比它应该更难: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.publishing.fields.imagefieldvalue.aspx

解决方案: 我终于通过创建一个继承自Microsoft.SharePoint.Publishing.PublishingLayoutPage的类文件来创建我的页面布局的代码,如下所述: http://msdn.microsoft.com/en-us/library/bb986729.aspx

当然,代码最终只有两行:

protected void Page_Load(object sender, EventArgs e)
        {

            ImageFieldValue imageField = InteriorHeaderImage.Value as ImageFieldValue;
            if (imageField!=null)
            {
                if(string.IsNullOrEmpty(imageField.ImageUrl))
                    imageField.ImageUrl = "/Style Library/assets/images/img1small.jpg";
            }

        }

6 个答案:

答案 0 :(得分:1)

我目前无法对此进行测试,但RichImageField字段控件具有可设置的Value属性。你能尝试以声明方式设置吗?

也许这会有效?:

<PublishingWebControls:RichImageField id="InteriorHeaderImage" Value="[it should be this easy]" />

或者,您可以在代码隐藏中设置页面布局,这比操作ImageFieldValue(根据您的链接)更容易。

答案 1 :(得分:0)

ImageFieldValue继承自HtmlTagValue类。 ImageFieldValue有一个构造函数,它接受完整的&lt; img /&gt;元件。您是否尝试使用完整的&lt; img /&gt;设置默认值?元素,如&lt; img src =“test.png”/&gt;?

答案 2 :(得分:0)

你能创建一个ImageFieldValue内联吗?

<PublishingWebControls:RichImageField id="InteriorHeaderImage" runat="server"
    DefaultImageURL='<%# new ImageFieldValue("<img src=\"test.png\" />") %>' />

只有在某个时刻调用控件的DataBind()方法时,这才有效。

答案 3 :(得分:0)

我有同样的需求,最后创建了一个自定义控件,可以在prerender中将占位符/默认图像添加到控件中。然后在页面布局中的RichImageField控件旁边添加自定义控件。

<强>代码:

        if ((PublishingPage.IsPublishingPage(SPContext.Current.ListItem)) &&
            (SPContext.Current.FormContext.FormMode == SPControlMode.Edit || SPContext.Current.FormContext.FormMode == SPControlMode.New))
        {
            RichImageField image = (RichImageField)this.Parent.FindControl("rifPageImage");
            if (image != null)
            {
                ImageFieldValue imgValue = (ImageFieldValue)image.Value;
                if (imgValue.ImageUrl == string.Empty)
                {
                    image.Value = new ImageFieldValue("<img src='/_layouts/images/GD/placeholder.png' />");
                }
            }
        }

答案 4 :(得分:0)

在将布局配置到母版库中时,您是否尝试为字段提供默认值?

<Property Name="RichImageFieldName" Value="<![CDATA[<IMG SRC="images/pathtoimage.jpg"></IMG>]]>" />

答案 5 :(得分:0)

Andro Selva的答案是正确的,但我必须稍微修改一下代码。由于我的Code Behind也是自定义的,而不是使用:

RichImageField image = (RichImageField)this.Parent.FindControl("rifPageImage");

我用过:

Protected RichImageField rifPageImage;

我刚将所有图片替换为rifPageImage。我得到this.Parent.FindControl的空值,因为.cs文件并没有真正链接到我的.aspx文件。