ASP.NET MVC: Не можете понять, что такое VirtualPath? - PullRequest
0 голосов
/ 20 апреля 2010

У меня есть вид, отображающий список изображений, и я сейчас пытаюсь заставить его отображать изображения в виде миниатюр.Ну, я почти уверен, что я правильно понял большую часть этого, используя VirtualPath из пользовательского ActionResult, хотя я не могу понять, что он делает 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 />

<% } %>

Любая помощь будет принята с благодарностью!Дайте мне знать о любых ваших вопросах.:) Спасибо!

1 Ответ

0 голосов
/ 20 апреля 2010

Из того, что я вижу, вы используете строковый член 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 }
);
...