0

データリストに画像を表示する次のコードがあります。

     if (!IsPostBack)
     {
      string str="~/"+txt1.Text+"/";
        DirectoryInfo dir = new DirectoryInfo(MapPath("str"));
        FileInfo[] files = dir.GetFiles();
        ArrayList list = new ArrayList();
        foreach (FileInfo oItem in files)
        {
            if (oItem.Extension == ".jpg" || oItem.Extension == ".jpeg" || oItem.Extension == ".gif")
                list.Add(oItem);
            //Image ImageData= (Image)DataList1.FindControl("Image1");
            //ImageData.ImageUrl = dir.ToString()+"{0}";
        }
        DataList1.DataSource = list;
        DataList1.DataBind();

    }

aspx:

<asp:DataList ID="DataList1" runat="server" RepeatColumns="10" CellPadding="5">
<ItemTemplate>
<asp:Image Width="20" Height="20" ID="Image1" ImageUrl='<%# Bind("Name", "~/ajax _main/testpages/images/{0}") %>' runat="server" />
<br />
<asp:HyperLink ID="HyperLink1" Text='<%# Bind("Name") %>' NavigateUrl='<%# Bind("Name", "~/ajax _main/testpages/images/{0}") %>' runat="server"/>
</ItemTemplate>
<ItemStyle BorderColor="silver" BorderStyle="dotted" BorderWidth="3px" HorizontalAlign="Center"
VerticalAlign="Bottom" />
</asp:DataList>

このテンプレートをcsファイルで定義して、txt1.Textに従ってナビゲートURLを変更できるようにします。これを行うのを手伝ってくれる人はいますか?

4

1 に答える 1

1

試す

DirectoryInfo dir = new DirectoryInfo(MapPath(str));

""str から削除したことに注意してください

そして、バインドすると、以下のようにパスをバインドできます

var paths = dir.GetFiles()
    .Where(f => f.Extension == ".jpg" || f.Extension == ".jpeg" || f.Extension == ".gif")
    .Select(p => new { Name = MapPathReverse(p.FullName) })
    .ToList();
DataList1.DataSource = paths;
DataList1.DataBind();

以下の方法で使用した物理パスから相対パスを取得するには

public static string MapPathReverse(string fullServerPath)
{
    return @"~\" + fullServerPath.Replace(HttpContext.Current.Request.PhysicalApplicationPath, String.Empty);
}

aspxバインディングを次のように変更できるようになりました

ImageUrl='<%# Bind("Name") %>'
于 2013-05-27T10:03:11.550 に答える