0

サブレイアウトで実際にあるリピーター コントロールから、ページのコード ビハインド メソッドを呼び出そうとしています。

問題

sc:fieldrenderer正常に機能し、ページ ソースでレンダリングされますが、<%# method(data) %>機能していないようで、ページ ソースにそのまま印刷されます。

説明

ここから sitecore パッケージをダウンロードしました - zip sitecore インストールを提供するSitecore jQuery Content Slider

そして、リピーターの構文はこのようなものです

サブレイアウト (部分) 構文

<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) %>は、ページ ビハインド メソッドからの値に解決される必要があります。typesThatShouldNotBeExpanded私は自分の方法を試しましたが、これを実行可能にすることはできません..リピーターのweb.configでコメントを付けたり、コメントを外したりしようとしました<type>System.Web.UI.WebControls.Repeater</type>

質問

ここで問題を解決するにはどうすればいいですか、それともリピーターItemDataBoundイベントなどに変更する必要がありますか?

4

2 に答える 2

0

これはすでに回答され、受け入れられていることは知っていますが、タイプミスもあります。

<# GetTextWidth(Container.DataItem) %>px; text-align:

する必要があります

<%# GetTextWidth(Container.DataItem) %>px; text-align:
于 2013-04-16T12:48:48.360 に答える