1

私のaspマークアップは次のとおりです。

       <asp:DataList ID="dtlist" runat="server" RepeatColumns="3" CellPadding="5"  OnItemDataBound="dtlist_DataBound">
        <ItemTemplate>
            <asp:Image Width="150" ID="Image1" ImageUrl='<%# Container.DataItem %>' runat="server" />
            <br />
            <asp:HyperLink ID="HyperLink12" Text='<%# Container.DataItem %>' NavigateUrl='<%# Container.DataItem %>' runat="server"/>                                               
        </ItemTemplate>
    </asp:DataList>

私のC#コードは次のとおりです。

        protected void dtlist_DataBound(object sender, DataListItemEventArgs e)
    {
        string albumName = Context.Request.QueryString["Album"];
        try
        {
            DirectoryInfo dir = new DirectoryInfo(MapPath(string.Format("Images/{0}", albumName)));
            FileInfo[] files = dir.GetFiles();

            foreach (FileInfo info in files)
            {
                ((Image)e.Item.FindControl("Image1")).ImageUrl = string.Format("~/Images/{0}/{1}", albumName, info.Name);
                ((HyperLink)e.Item.FindControl("HyperLink12")).Text = info.Name;
                ((HyperLink)e.Item.FindControl("HyperLink12")).NavigateUrl = string.Format("~/Images/{0}/{1}", albumName, info.Name);    
            }
        }
        catch (Exception ex)
        {

            throw;
        }
    }

ディスク ドライブに保存されている特定のフォルダ (アルバム) から画像を表示したい。ユーザーがアルバム 1 をクリックすると、アルバム 1 のすべての画像が表示されます。たとえば。album1 に 10 個の画像が含まれている場合、10 個の画像が datalist に表示されます。しかし、上記のコードから、最後の画像のみが 10 個の画像すべてに表示されます。上記のコードを変更して 10 個の画像を表示する方法はありますか?

4

1 に答える 1

1

ここでは on item データバインドは必要ありません。マークアップを次のように変更できます。

<asp:DataList ID="dtlist" runat="server" RepeatColumns="3" CellPadding="5">
    <ItemTemplate>
        <asp:Image Width="150" ID="Image1" ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Image") %>' runat="server" />
        <br />
        <asp:HyperLink ID="HyperLink12" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "Image") %>' runat="server"/>                                               
    </ItemTemplate>
</asp:DataList>

また、ページの読み込み時に、目的のプロパティ名を持つ匿名型の新しいリストを選択できます (<%# DataBinder.Eval(Container.DataItem, " Name ") %> としてマークアップに記載されているとおり):

    string albumName = Context.Request.QueryString["Album"];
    try
    {
        DirectoryInfo dir = new DirectoryInfo(MapPath(string.Format("Images/{0}", albumName)));

        var dataToBeBound = dir.GetFiles().Select(x => new
        {
            Name = x.Name,
            Image = string.Format("~/Images/{0}/{1}", albumName, x.Name)

        }).ToList();
        dtlist.DataSource = dataToBeBound;
        dtList.DataBind();
    }
    catch (Exception ex)
    {

        throw;
    }
于 2013-08-19T05:28:15.803 に答える