2016-06-07 13 views
2

我有一个布局验证码产地:Sitecore的项目与HTML属性 - Web表单

<div class="pm-single-post-img-container" style="background-image:url(images/01.jpg);"> 
    <div class="pm-single-post-title full-width"> 
     <p> 
     <sc:Text runat="server" Field="Title" /> 
     </p> 
    </div> 
</div> 

而且我有一个像场,并希望得到图像的URL设置为DIV的背景下,这样的:

<% 
Sitecore.Data.Fields.ImageField imageField = Sitecore.Context.Item.Fields["Image"]; 
var thumbnailUrl = string.Empty; 
if (imageField != null && imageField.MediaItem!=null) 
{ 
    thumbnailUrl = Sitecore.Resources.Media.MediaManager.GetMediaUrl(imageField.MediaItem); 
} 
%> 
<div class="pm-single-post-img-container" style="background-image:url(<%=thumbnailUrl%>);"> 
    <div class="pm-single-post-title full-width"> 
     <p> 
      <sc:Text runat="server" Field="Title" /> 
     </p> 
    </div> 
</div> 

但是这种方式在页面处于编辑模式时有错误,因为使用了块代码。 如果您有另一种解决方案,请分享给我。谢谢 !

+0

你会得到什么样的错误?你能提供吗? – Anton

+0

Here:由于控件包含代码块(即<% ... %>),控件集合无法修改。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关该错误的更多信息以及源代码的位置。 异常详细信息:System.Web.HttpException:控件集合无法修改,因为控件包含代码块(即<% ... %>)。 – MrBac

回答

0

尽量避免使用代码块。

您的页面(aspx.cs)或控件(ascx.cs)可以具有公共属性。

public string BackgroundUrl 
{ 
    get 
    { 
     Sitecore.Data.Fields.ImageField imageField = Sitecore.Context.Item.Fields["Image"]; 
     var thumbnailUrl = string.Empty; 
     if (imageField != null && imageField.MediaItem != null) 
     { 
      thumbnailUrl = Sitecore.Resources.Media.MediaManager.GetMediaUrl(imageField.MediaItem); 
     } 
     return thumbnailUrl; 
    } 
} 

而且你可以用它在你的代码

<div class="pm-single-post-img-container" style="background-image:url(<%=BackgroundUrl%>);"> 
    <div class="pm-single-post-title full-width"> 
     <p> 
      <sc:Text runat="server" Field="Title" /> 
     </p> 
    </div> 
</div> 

如果你得到这个错误“Controls集合不能修改,因为该控件包含代码块”跟随Presentation Component Troubleshooting

添加了有关网页编辑器图像编辑问题之后发表评论:

开箱即用Sit​​ecore无法编辑div的背景图像。但是您可以为PE模式渲染标记而不是背景图像。例如:

<sc:Image Field="Image" ID="ImagePE" runat="server" Visible="false"> 
<sc:Text runat="server" Field="Title" ID="TitlePE" Visible="false"/> 
<div runat="server" ID="DivNormalMode"> 
... your current code 
</div> 

和控制能见度后面的代码

if (Sitecore.Context.PageMode.IsPageEditor) 
{ 
    ImagePE.Visible = true; 
    TitlePE.Visible = true; 
    DivNormalMode.Visible = false; 
} 

虽然改变的标记和样式可以实现在PE模式和编辑图像的能力相当不错的外观。或者,如果你有所见即所得的要求,你应该有Sitecore Edit Frame for your image field。你将能够编辑背景图像作为领域。

+0

感谢Anton,但凭借您的解决方案和我的解决方案,我无法在体验编辑器中修改图像。 – MrBac

+0

@MrBac,这是另一个问题:-) – Anton

+0

@MrBac,我增加了两种方式的描述,你如何扩展你的代码编辑图像的能力。 – Anton