0

Pdfこのモジュールにフィールドが必要です。PDFの完全なURLと名前に到達したいのですが、sitefinityでの方法がわかりません。誰か助けてくれませんか?

asp.x

<asp:Repeater ID="rptList" runat="server" OnItemDataBound="rptList_ItemDataBound">
    <HeaderTemplate>
    </HeaderTemplate>
    <ItemTemplate>
        <asp:Label ID="lblTitle" runat="server" Text='<%# Eval("Title") %>'></asp:Label>
        <asp:Label ID="lblSummary" runat="server" Text='<%# Eval("Content") %>'></asp:Label>
        <div>
            <asp:Repeater ID="rptPdfList" runat="server" >
                <HeaderTemplate>
                </HeaderTemplate>
                <ItemTemplate>
                    <li>
                        <asp:HyperLink ID="hlSubMenu" runat="server" Text='<%# Eval("Name") %>' NavigateUrl='<%# Eval("Url") %>'
                            onclick='return handleHyperLinkClick(this)'></asp:HyperLink>
                    </li>
                </ItemTemplate>
                <FooterTemplate>
                </FooterTemplate>
            </asp:Repeater>
        </div>
    </ItemTemplate>
    <FooterTemplate>
    </FooterTemplate>
</asp:Repeater>

.cs

private Guid guid { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            string id = Request.QueryString["id"];

            guid = new Guid(id);
            var myCollection = GetDataItems();

            rptList.DataSource = myCollection;
            rptList.DataBind();
        }
    }

    public IQueryable<DynamicContent> GetDataItems()
    {
        DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager();
        Type newsReleasesType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.NewsReleases.NewsReleases");
        var myCollection = dynamicModuleManager.GetDataItems(newsReleasesType).Where(i => i.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live && i.Id == guid);
        return myCollection;
    }

    protected void rptList_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        DataTable dtChildNodes = new DataTable();
        dtChildNodes.Columns.Add("Name", typeof(string));
        dtChildNodes.Columns.Add("Url", typeof(string));

        var myCollection = GetDataItems();

        foreach (var mp in myCollection)
        {
            ContentLink cl = ((ContentLink[])mp.GetValue("Pdf"))[0];
            dtChildNodes.Rows.Add(cl.ChildItemProviderName, cl.ChildItemAdditionalInfo);
        }

        Repeater rpt = (Repeater)e.Item.FindControl("rptPdfList");
        rpt.DataSource = dtChildNodes;
        rpt.DataBind();
    }
4

1 に答える 1

0

あなたは間違いなく正しい軌道に乗っています!ContentLink[] は、実際にはライブラリ アイテムへの参照を格納しているため、メディアの格納方法です。

ChildItemId をコンテンツ リンク (c1.ChildItemId) から LibraryManager.Get メソッド (GetImage や GetDocument など) に渡すだけで、実際のコンテンツ アイテムを取得できます。

そこから Content.Url を実行するだけで、ライブラリ アイテムへの実際のリンクを取得できます。

次の Sitefinity ブログにこの例があります: http://www.sitefinity.com/blogs/joshmorales/posts/josh-morales-blog/2012/01/19/retriving_data_from_dynamic_modules_using_the_module_builder_api

これがお役に立てば幸いです。

于 2013-01-18T18:36:01.620 に答える