在我的自定义页面布局中,我声明了一个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";
}
}
答案 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文件。