我正在尝试从转发器控件调用页面的代码隐藏方法,这在子布局中是实际的。
sc:fieldrenderer
效果良好并在页面源上呈现,但<%# method(data) %>
似乎无法正常工作并打印在页面源上。
我已从此处下载了sitecore软件包 - Sitecore jQuery Content Slider ,其中提供了zip sitecore installation
转发器语法有点像这样
子布局(部分)语法
<asp:repeater runat="server" id="repeater">
<itemtemplate>
<li>
<div style="background: url("
<%# GetImageUrl(Container.DataItem) %>); height:
<%# Height %>px;">
<div style="padding:"
<%# GetTopMargin(Container.DataItem) %>px 0px 0px
<%# GetLeftMargin(Container.DataItem) %>px; width:
<# GetTextWidth(Container.DataItem) %>px; text-align:
<%# GetTextAlignment(Container.DataItem) %>;">
<div class="title">
<sc:fieldrenderer fieldname="Title" item=''
<%# Container.DataItem %>' runat="server"></sc:fieldrenderer>
</div>
<div class="text">
<sc:fieldrenderer fieldname="Text" item=''
<%# Container.DataItem %>' runat="server"></sc:fieldrenderer>
</div>
<div class="link">
<sc:fieldrenderer fieldname="URL" item=''
<%# Container.DataItem %>' runat="server"></sc:fieldrenderer>
</div>
</div>
</div>
</li>
</itemtemplate>
</asp:repeater>
背后的布局代码
public string GetImageUrl(object itm)
{
Item item = (Item)itm;
ImageField image = item.Fields["Image"];
if (image != null)
{
MediaItem i = image.MediaItem;
if (i == null)
{
return string.Empty;
}
string u = Sitecore.Resources.Media.MediaManager.GetMediaUrl(i);
u = HttpUtility.UrlPathEncode(u);
return string.Concat("", u);
}
return string.Empty;
}
<div style="background: url(<%# GetImageUrl(Container.DataItem) %>); height:<%# Height %>px;">
<div style="padding:"<%# GetTopMargin(Container.DataItem) %>px 0px 0px <%# GetLeftMargin(Container.DataItem) %>px; width: <# GetTextWidth(Container.DataItem) %>px; text-align:<%# GetTextAlignment(Container.DataItem) %>;">
<div class="title">
Untitled Item
</div>
<div class="text">
Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum
</div>
<div class="link">
<a title="Lorem-Ipsum">Learn about Lorem Ipsum</a>
</div>
</div>
</div>
<%# GetImageUrl(Container.DataItem) %>
等类似的服务器标记应解析为页面隐藏方法的值。我已尝试过我的方法,但无法使其成功。我甚至试图评论并取消注释web.config中typesThatShouldNotBeExpanded
的转发器<type>System.Web.UI.WebControls.Repeater</type>
如何解决问题,或者我应该更改为转发器
ItemDataBound
事件等等?
答案 0 :(得分:1)
FindControl
事件中使用ItemDataBound
并将你的数据绑定到找到的控件。
您可以使用asp:Panel
控件代替DIV元素并在其上设置Style
属性(尽管我强烈建议您使用CSS类来保持其可维护性)
如果有人可以格式化这个答案,将不胜感激(使用移动设备)
答案 1 :(得分:0)
我知道这已经得到了回答和接受,但你也有一个错字:
<# GetTextWidth(Container.DataItem) %>px; text-align:
应该是
<%# GetTextWidth(Container.DataItem) %>px; text-align: