首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从中继器控制中的Sublayout调用Page的代码隐藏方法

从中继器控制中的Sublayout调用Page的代码隐藏方法
EN

Stack Overflow用户
提问于 2013-04-16 09:42:43
回答 2查看 875关注 0票数 0

我正在尝试从中继器控件调用页面后面的代码,这是子布局中的实际操作。

问题

sc:fieldrenderer运行良好,并在页面源上呈现,但<%# method(data) %>似乎无法正常工作并打印页面源。

描述

我已经从这里下载了jQuery含量滑块包,它提供了拉链式建筑安装

中继器的语法有点像这样

Sublayout (部分)语法

代码语言:javascript
复制
<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>

Sublayout代码在中的应用

代码语言:javascript
复制
    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;
    }

输出

代码语言:javascript
复制
<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) %>和类似的,应该解析为从页面后面的方法的值。我已经尝试过我的方法,但无法使这件事行得通。我甚至试着在typesThatShouldNotBeExpanded的中继器<type>System.Web.UI.WebControls.Repeater</type>中评论和取消评论。

问题

如何解决问题在这里还是我应该改为中继器ItemDataBound事件等等?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-16 09:54:28

国际海事组织,这种方式的数据是不好的设计。我要做的(如果您这样做一定会解决您的“问题”)是在中继器的FindControl事件中使用ItemDataBound,并将数据绑定到找到的控件。

与DIV元素不同,您可以使用asp:Panel控件并在其上设置Style属性(尽管我强烈建议您使用CSS类来保持其可维护性)

如果有人可以格式化这个答案,将不胜感激(使用移动设备)。

票数 1
EN

Stack Overflow用户

发布于 2013-04-16 12:48:48

我知道这一点已经被回答和接受了,但是你也有一个错误:

代码语言:javascript
复制
<# GetTextWidth(Container.DataItem) %>px; text-align:

应该是

代码语言:javascript
复制
<%# GetTextWidth(Container.DataItem) %>px; text-align:
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16033677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档