шаблоны рендеринга sharepoint устанавливают атрибуты из полей - PullRequest
2 голосов
/ 12 февраля 2010

Я пытаюсь написать собственный шаблон рендеринга для использования в DisplayForm списка, чьи поля включают Title, HeaderImageUrl, Body. Пока у меня есть следующее:

<SharePoint:RenderingTemplate ID="NewsListForm" runat="server">
 <Template>
  <h1><SharePoint:FieldValue FieldName="Title" runat="server"/></h1>
  <div>
      <p>
          <SharePoint:UrlField FieldName="HeaderImageUrl" runat="server"></SharePoint:UrlField>
          <SharePoint:RichTextField FieldName="Body" runat="server" />
      </p>
  </div>
 </Template>
</SharePoint:RenderingTemplate>

Поле HeaderImageUrl настроено для URL-адреса изображения, но когда я использую элемент управления UrlField, оно отображает ссылку.

Я думал, что может быть способ получить значения полей и поместить их в атрибуты, так что-то вроде этого:

<asp:Image ImageUrl="<% FieldValue["HeaderImageUrl"] %>" runat="server"/>

Если такого рода вещи невозможны, то есть ли в Microsoft.SharePoint.WebControls другой элемент управления, который бы отображал изображение с URL?

Ответы [ 4 ]

2 голосов
/ 12 февраля 2010

Все примеры, которые я видел, вызывая поле URL, которое будет отображаться как изображение, были с помощью кода C #. Что довольно раздражает, так как большинство битов веб-части могут быть написаны без использования кода C #. Вам также может понадобиться пойти по этому пути ... возможно, пользовательский элемент управления или пользовательский элемент управления.

Даже если ваш код выше получил значение для HeaderImageUrl, он не будет работать, так как значения Url (сбивают с толку):

[заданный фактический URL] [какая-то странная строка разделителя] [поле описания URL (обычно реальный URL, если вы его не указали)]

Таким образом, вам нужно разделить строку значениями делитера te и использовать [0] (первый) в качестве того, что вы вводите в URL вашего изображения.

Пожалуйста, пишите, если вы найдете способ сделать это без написания кода C #.

p.s. Рассматривали ли вы вопрос об использовании DataFormWebPart, в котором есть раздел xsl, в котором вы можете делать то, что вам нужно?!

Пример: Вы можете вставить следующий синтаксис в любой файл aspx / ascx:

<%@ Register tagprefix="SharePoint" namespace="Microsoft.SharePoint.WebControls" assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register tagprefix="WebPartPages" namespace="Microsoft.SharePoint.WebPartPages" assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls" Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<WebPartPages:DataFormWebPart runat="server" IsIncluded="True" FrameType="None" 
NoDefaultStyle="TRUE" ViewFlag="0" Title="My List Display" 
 Default="FALSE" ID="dfwp_MyListDisplay"
 DisplayName="My List Display">
 <DataSources>
        <SharePoint:SPDataSource runat="server" DataSourceMode="List" UseInternalName="true" 
        selectcommand='&lt;View&gt;&lt;Query&gt;&lt;Where&gt;&lt;Eq&gt;&lt;FieldRef Name=&quot;Category&quot;/&gt;&lt;Value Type=&quot;Text&quot;&gt;Header&lt;/Value&gt;&lt;/Eq&gt;&lt;/Where&gt;&lt;/Query&gt;&lt;/View&gt;' id="Utility_x0020_Navigation1"><SelectParameters><WebPartPages:DataFormParameter Name="ListName" ParameterKey="ListName" PropertyName="ParameterValues" DefaultValue="My List Display"/>
        <asp:Parameter Name="ListName" DefaultValue="LIST NAME" />
        <asp:Parameter Name="WebUrl" DefaultValue="<% $SPUrl:~SiteCollection/ %>" />
        </SelectParameters>
        </SharePoint:SPDataSource>
    </DataSources>
    <ParameterBindings>
    <ParameterBinding Name="dvt_apos" Location="Postback;Connection"/>
    <ParameterBinding Name="PageURL" Location="ServerVariable(URL)" DefaultValue=""/>
    <ParameterBinding Name="SiteUrl" Location="ServerVariable(SERVER_NAME)" DefaultValue=""/>
</ParameterBindings>
    <datafields>@Title,Title;@URL,URL;@Category,Category;@Parent_x0020_item,Parent_x0020_item;@Sort_x0020_Order,Sort Order;@ID,ID;@ContentType,Content Type;@Modified,Modified;@Created,Created;@Author,Created By;@Editor,Modified By;@_UIVersionString,Version;@Attachments,Attachments;@File_x0020_Type,File Type;@FileLeafRef,Name (for use in forms);@FileDirRef,Path;@FSObjType,Item Type;@_HasCopyDestinations,Has Copy Destinations;@_CopySource,Copy Source;@ContentTypeId,Content Type ID;@_ModerationStatus,Approval Status;@_UIVersion,UI Version;@Created_x0020_Date,Created;@FileRef,URL Path;</datafields>
    <xsl>
    YOUR XSLT HERE
    </xsl>

</WebPartPages:DataFormWebPart>
1 голос
/ 20 февраля 2010

Следующий код даст вам URL поля изображения:

SPListItem item = GetItem();
string imagefieldhtml = item["HeaderImageUrl"].ToString();
ImageFieldValue imagefield = new ImageFieldValue(imagefieldhtml);

var url = imagefield.ImageUrl;

Так что, может быть, изменение вашего положения поможет вам, или, может быть, поможет вам хотя бы ...?

<asp:Image ImageUrl="<% (ImageFieldValue ["HeaderImageUrl"]).ImageUrl %>" runat="server"/>
0 голосов
/ 06 марта 2010

Оказывается, моя проблема заключалась в том, что у меня не было этого столбца изображения, настроенного для отображения как изображения, а не как ссылки. Как оказалось, встроенный элемент управления Microsoft.SharePoint.UrlField работал просто отлично.

0 голосов
/ 20 февраля 2010

Невозможно проверить это atm (без среды), но я совершенно уверен, что делал это раньше.

Попробуйте это:

<SharePoint:FieldValue FieldName="HeaderImageUrl" runat="server"/>

или

<img src="<SharePoint:FieldValue FieldName="HeaderImageUrl" runat="server"/>" />

Я проверю это и проведу тест к понедельнику, если они не сработали и вам все еще нужна помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...