0

我有一个显示图像列表的视图,我现在正试图让它将图像显示为缩略图。好吧,我很确定我使用自定义 ActionResult 中的 VirtualPath 得到了大部分内容,尽管我似乎无法弄清楚它在制作 VirtualPath url 是什么?顺便说一句,我使用 XML 来存储来自图像的数据而不是 SQL。这是我的代码:

我的自定义 ActionResult 中的代码:

public class ThumbnailResult : ActionResult
{
    public ThumbnailResult(string virtualPath)
    {
        this.VirtualPath = virtualPath;
    }

    public string VirtualPath { get; set; }

    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.ContentType = "image/bmp";

        string fullFileName =
            context.HttpContext.Server.MapPath("~/Galleries/WhereConfusionMeetsConcrete/" + VirtualPath);
        using (System.Drawing.Image photoImg =
            System.Drawing.Image.FromFile(fullFileName))
        {
            using (System.Drawing.Image thumbPhoto =
                photoImg.GetThumbnailImage(100, 100, null, new System.IntPtr()))
            {
                using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                {
                    thumbPhoto.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                    context.HttpContext.Response.BinaryWrite(ms.ToArray());
                    context.HttpContext.Response.End();
                }
            }
        }
    }
}

我的控制器的代码:

public ActionResult Thumbnail(string id)
{
    return new ThumbnailResult(id);
}

我的观点的代码:

<% foreach (var image in ViewData.Model) { %>

<a href="../Galleries/TestGallery1/<%= image.Path %>"><img src="../Galleries/TestGallery1/thumbnail/<%= image.Path %>" alt="<%= image.Caption %>" /></a>
<br /><br /><%= image.Caption %><br /><br /><br />

<% } %>

任何帮助将不胜感激!!让我知道您有任何问题。:) 谢谢!

4

1 回答 1

0

从我可以看到您VirtualPath在自定义操作中使用字符串成员ThumbnailResult来识别图像 url 的最后一部分。因此,例如,如果您的站点位于c:\wwwroot\Galleries\WhereConfusionMeetsConcrete并且图像文件位于此文件夹中,如image1.bmp, image2.bmp, ... 您只能将图像文件名传递给在控制器操作中调用并传递id参数的自定义操作结果构造函数。因此,为了image1.bmp在您的视图中显示缩略图,您可以这样做:

<img src="<%= Url.RouteUrl(new { controller = "home", action = "Thumbnail", id = "image1.bmp" }) %>" alt="" />

当然,这假设您有这样的默认路由:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
于 2010-04-20T05:12:37.367 回答