我有一个显示图像列表的视图,我现在正试图让它以缩略图的形式显示图像。好吧,我很确定我从自定义ActionResult使用VirtualPath得到了大部分权利,虽然我似乎无法弄清楚它是什么使得VirtualPath网址?顺便说一句,我使用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 />
<% } %>
任何帮助将不胜感激!!如果您有任何问题,请与我们联系。 :)谢谢!
答案 0 :(得分:0)
我可以看到您使用VirtualPath
自定义操作中的ThumbnailResult
字符串成员来识别图片网址的最后部分。例如,如果您的网站位于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 }
);