使用asp.net绑定转发器中的图像

时间:2015-01-22 17:31:19

标签: c# asp.net

在下面的代码中我有一个转发器,我想将图像从本地驱动器绑定到转发器。但图像没有绑定但我可以从本地驱动器获取图像名称请帮我解决问题。 / p>

  string[] filePaths = Directory.GetFiles("D:\\Users\\Images\\Pictures\\");
            List<ListItem> files = new List<ListItem>();
            foreach (string filePath in filePaths)
            {
                string fileName = Path.GetFileName(filePath);
                files.Add(new ListItem(fileName, @"D:\Users\Images\Pictures\" + fileName)); //i can get image name  --D:\Users\Images\Pictures\flight.jpg
            }
            Repeater1.DataSource = files;
            Repeater1.DataBind();


 <asp:Repeater ID="Repeater1" runat="server">
                        <ItemTemplate>
                            <li>
                                <img src='<%# DataBinder.Eval(Container.DataItem,"Value") %>' title='<%# (DataBinder.Eval(Container.DataItem,"Text").ToString()).Split('.')[0].ToString() %>' alt=""></li>
                        </ItemTemplate>
                    </asp:Repeater>

1 个答案:

答案 0 :(得分:1)

客户端无法下载Web应用程序文件夹之外的文件。你有两个选择 -

选项1

将图像保留在Web应用程序的文件夹中。例如,

enter image description here

选项2

创建GenericHandler。

注意: 当您的应用程序转移到生产环境时,您需要确保Web服务器中存在D:\Users\Images文件夹。

public class ImageHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        string fileName = context.Request.QueryString["filename"];
        context.Response.ContentType = "image/jpeg";
        context.Response.TransmitFile(@"D:\Users\Images\Pictures\" + fileName);
    }

    public bool IsReusable
    {
        get { return false; }
    }
}

ASPX
<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <asp:Image runat="server" 
            ImageUrl='<%# "~/ImageHandler.ashx?filename=" + Eval("Value") %>' />
    </ItemTemplate>
</asp:Repeater>

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string[] filePaths = Directory.GetFiles(@"D:\Users\Images\Pictures");
        List<ListItem> files = new List<ListItem>();
        foreach (string filePath in filePaths)
        {
            string fileName = Path.GetFileName(filePath);
            files.Add(new ListItem(fileName, fileName)); 
        }
        Repeater1.DataSource = files;
        Repeater1.DataBind();
    }
}