2009-08-17 61 views
2

在我的自定义页面布局,我宣布一个RichImageField的Sharepoint 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]" /> 

看来,控件的值属性分配一个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"; 
      } 

     } 

回答

1

我不能在此刻测试这一点,但RichImageField现场控制具有Value属性,可以设置。你可以尝试设置声明?

也许这将工作?:

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

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

+0

我很感激你的意见。我测试了你的想法,但正如预期的那样,value属性并不期望表示ImageFieldValue对象的字符串。我收到以下异常: 无法为其'Value'属性的字符串表示'test.png'创建类型为'System.Object'的对象。 – 2009-08-17 20:07:27

0

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

+0

好主意,不幸的是,我尝试了你的想法,没有任何运气。我想我必须尝试一下代码隐藏方法。 – 2009-08-18 14:25:31

0

你能创建一个ImageFieldValue内联吗?

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

这如果控制的DataBind()方法被调用在某一时刻只会工作。

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' />"); 
       } 
      } 
     } 
0

您是否尝试过你的场中提供一个默认值,当您提供您的布局到母版图库?

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

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

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

我用:

Protected RichImageField rifPageImage; 

和我刚刚更换所有图像rifPageImage。由于.cs文件没有真正链接到我的.aspx文件,因此我得到了this.Parent.FindControl的空值。