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