Sharepoint RichImageField установить изображение по умолчанию

В моем пользовательском макете страницы я объявляю 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 ответов

Я не могу проверить это в данный момент, но RichImageField полевой контроль имеет Value свойство, которое можно установить. Можете ли вы попробовать установить это декларативно?

Может это сработает?

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

В качестве альтернативы, вы можете установить код для макета страницы, что должно быть проще, чем манипулирование ImageFieldValue (по вашей ссылке).

Ответ Андро Сельвы был правильным, но я должен немного пересмотреть код. Так как мой код сзади тоже нестандартный, вместо использования:

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

Я использовал:

Protected RichImageField rifPageImage;

и я просто заменил все изображения на rifPageImage. Я получил нулевое значение для this.Parent.FindControl, поскольку файл.cs на самом деле не связан с моим файлом.aspx.

Вы пытались указать значение по умолчанию для своего поля при подготовке макета в галерею мастер-страниц?

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

ImageFieldValue наследуется от класса HtmlTagValue. ImageFieldValue имеет конструктор, который принимает полный элемент . Вы пытались установить значение по умолчанию, используя полный элемент , например ?

Не могли бы вы создать ImageFieldValue в соответствии?

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

Это будет работать только если контроль DataBind() метод вызывается в какой-то момент.

У меня возникла такая же потребность, и в итоге я создал собственный элемент управления, который бы добавил изображение-заполнитель / изображение по умолчанию в элемент управления при предварительном просмотре. Затем пользовательский элемент управления добавляется прямо рядом с элементом управления 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' />");
                }
            }
        }
Другие вопросы по тегам