datalist的动态模板字段

时间:2013-05-27 09:51:21

标签: c# asp.net datalist

我有以下代码在datalist中显示图像。

     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。任何人都可以帮我这么做吗?

1 个答案:

答案 0 :(得分: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") %>'