2009-08-17 84 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的空值。