2010-02-12 8 views
2

J'essaie d'écrire un modèle de rendu personnalisé à utiliser dans le DisplayForm d'une liste dont les champs incluent Title, HeaderImageUrl, Body. J'ai ce qui suit à ce jour:modèles de rendu sharepoint définir des attributs à partir des champs

<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> 

Le champ HeaderImageUrl est configuré pour être une URL de l'image, mais quand j'utilise le contrôle UrlField, il rend un lien.

Je pensais qu'il pourrait y avoir un moyen de saisir les valeurs de champ et de les mettre dans les attributs, donc quelque chose comme ceci:

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

Si ce genre de chose est impossible, est-il un autre contrôle Microsoft.SharePoint.WebControls qui rendrait une image à partir d'une URL?

Répondre

0

avère que mon problème était tout simplement que je ne dispose pas de cette colonne d'image créée pour rendre comme une image, plutôt que comme un lien. Le Microsoft.SharePoint intégré.Le contrôle UrlField a bien fonctionné, comme il s'est avéré.

2

Tous les exemples que j'ai vus d'appeler un champ d'URL à afficher comme une image ont été à travers le code C#. Ce qui est assez ennuyeux puisque la plupart des bits de partie web peuvent être écrits sans utiliser le code C#. Vous pourriez également devoir suivre cette route ici ... peut-être un contrôle de champ personnalisé ou un contrôle d'utilisateur.

Même si votre code ci-dessus a obtenir la valeur pour HeaderImageUrl, cela ne fonctionnerait pas comme des valeurs d'URL sont (confusément):

[l'URL spécifiée] [une chaîne de délimiteur wierd] [le champ de description de l'url (habituellement l'url à nouveau si vous ne le spécifiez pas)]

Vous devrez donc diviser la chaîne avec les valeurs delimeter et utiliser le [0] (le premier) comme ce que vous injectez dans votre image url.

Veuillez publier si vous trouvez un moyen de le faire sans écrire le code C#.

p.s. Avez-vous envisagé d'utiliser un DataFormWebPart qui a une section xsl dans laquelle vous pourriez faire extraire ce dont vous avez besoin ?!

Exemple: Vous pouvez coller la syntaxe suivante dans un fichier 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> 
+0

L'une des raisons pour lesquelles je ne souhaite pas utiliser DataFormWebPart est qu'il nécessite SharePoint Designer. Je veux que tout ce que je déploie soit dans une (des) solution (s). –

+0

Hey, Vous n'avez pas besoin de SharePoint Designer pour créer un DataFormWebPart. Vous pouvez simplement ajouter la syntaxe DataFormWebPart à n'importe quel fichier ascx ou aspx, y compris les mises en page que vous pourriez déployer. Jetez un oeil à la modification que j'ai apportée à mon message. – Zeb

0

Impossible de le tester atm (pas l'environnement), mais je suis tout à fait sûr que je l'ai fait auparavant.

Essayez:

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

ou:

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

Je vais vérifier à nouveau le celui-ci et faire un test réel par lundi si ceux ne marchait pas et vous avez encore besoin d'aide.

1

Le code suivant vous obtiendrez l'URL d'un ImageField:

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

var url = imagefield.ImageUrl; 

Alors peut-être modifier votre à quelque chose comme ça va vous aider, ou peut-être vous aider atleast ...?

<asp:Image ImageUrl="<% (ImageFieldValue ["HeaderImageUrl"]).ImageUrl %>" runat="server"/> 
Questions connexes