【发布时间】:2014-02-22 19:41:18
【问题描述】:
我正在开发一个图片库,它允许上传图片,该图片生成并存储为缩略图以及原始图片。
缩略图文件夹中的图像已列出,如果用户单击其中一个缩略图,则该图像应以全尺寸显示,并且单击的缩略图应带有边框,显示用户单击了哪个缩略图。
为此,我使用了Repeater 控件以及图像和超链接控件。下面你可以看到我的代码隐藏文件(文件的实际存储发生在一个单独的类中)。
它可以选择文件并上传:文件生成为缩略图,上传的图像以全尺寸显示。但是,有些事情我需要帮助:
如果单击其中一个缩略图,则应将 Css 类添加到该缩略图(添加边框),这是我尝试使用 ItemRepeater_ItemCommand 完成的事情。这里的问题是所有缩略图都得到了这个类。我怎么能只选择点击的缩略图?
如何在超链接标记中编写代码,以便单击的缩略图显示在 ID="fullSizeImage" 的图像控件中,而不是显示在新页面上?
来自后面的代码:
protected void Page_Load(object sender, EventArgs e) {
var directory = new DirectoryInfo(Gallery.PhysicalApplicationPath + "/Images");
var theFiles = directory.GetFiles();
ImageRepeater.DataSource = theFiles;
ImageRepeater.DataBind();
}
protected void ImageRepeater_ItemCommand(object source, RepeaterCommandEventArgs e) {
if (e.Item.ItemType == ListItemType.Item) {
var fi = e.Item.DataItem as FileInfo;
if (fi != null) {
var hyperLink = e.Item.FindControl("ImageHyperLink") as HyperLink;
if (hyperLink != null) {
hyperLink.CssClass = "border";
}
}
}
}
protected void UploadButton_Click1(object sender, EventArgs e) {
if (ImageUpload.HasFile) {
var content = ImageUpload.FileContent;
var name = ImageUpload.FileName;
var image = Gallery.SaveImage(content, name);
fullSizeImage.ImageUrl = "Images/" + image;
}
}
来自default.aspx:
<asp:Image ID="fullSizeImage" runat="server" />
<asp:Repeater ID="ImageRepeater" runat="server" DataSourceID=""
onitemcommand="ImageRepeater_ItemCommand">
<ItemTemplate>
<asp:HyperLink ID="ImageHyperLink" runat="server" NavigateUrl='<%# Eval("Name", "~/Images/{0}") %>' >
<asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("Name", "~/Images/Thumbnails/{0}") %>' CssClass="thumbnail" />
</asp:HyperLink>
</ItemTemplate>
</asp:Repeater>
提前致谢!
【问题讨论】: