2

在我的自定义页面布局中,我声明了一个 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-我们/图书馆/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";
            }

        }
4

6 回答 6

1

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

也许这会起作用?:

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

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

于 2009-08-17T19:32:02.357 回答
0

我有同样的需求,最终创建了一个自定义控件,它将占位符/默认图像添加到预渲染控件中。然后在页面布局中的 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' />");
                }
            }
        }
于 2012-06-22T13:14:50.880 回答
0

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

<Property Name="RichImageFieldName" Value="<![CDATA[<IMG SRC="images/pathtoimage.jpg"></IMG>]]>" />
于 2013-03-28T20:00:44.563 回答
0

ImageFieldValue 继承自 HtmlTagValue 类。ImageFieldValue 有一个构造函数,它接受完整的 <img /> 元素。您是否尝试过使用完整的 <img /> 元素设置默认值,例如 <img src="test.png" />?

于 2009-08-18T06:00:10.157 回答
0

你能创建一个ImageFieldValue内联吗?

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

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

于 2009-08-18T18:43:23.370 回答
0

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

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

我用了:

Protected RichImageField rifPageImage;

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

于 2013-07-18T16:02:18.810 回答