2011-01-10 3 views
2

У меня есть обработчик ASHX, возвращающий изображение на загрузку страницы. Мне нужно добавить класс к изображению динамически в зависимости от размеров изображения. Я пытался сделать это с помощью следующих методов:ashx control return image, jquery get size on load или .NET OnLoad методы не работают

Код За методом

сСт

protected void Page_Load(object sender, EventArgs e) 
{ 
    int id = Convert.ToInt32(Request.QueryString["id"]); 
    image1.ImageUrl = "get_image.ashx?id=" + id; 
} 

public void classify_image_Load(object sender, EventArgs e) 
{ 
    if(image1.Width.Value > image1.Height.Value) 
    { 
     image1.CssClass = "landscape"; 
    } 
    else 
    { 
     image1.CssClass = "portrait"; 
    } 
} 

HTML

<asp:Image ID="image1" runat="server" OnLoad="classify_image_Load" /> 

Это работает на начальной загрузки, однако на любых обратных передачах (загрузка нового i маг/вращение/обрезка), он не может правильно применить класс.

JQuery Метод

JS

$(window).load(function(){ 

    $('#image1').load(function() { 
     if($(this).width() > $(this).height()) 
     { 
      $(this).attr('class', 'landscape'); 
     } else { 
      $(this).attr('class', 'portrait'); 
     } 
    }); 

}); 

Этот метод не работает вообще, изображение не имеет класса, возложенные на него. Я не уверен, что это вопрос времени с управлением ashx или что.

ASHX Код

public class get_image : IHttpHandler 
{ 
    string file_path = ConfigurationManager.AppSettings["file_path"].ToString(); 
    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.Clear(); 
     Image img; 
     if (!String.IsNullOrEmpty(context.Request.QueryString["id"])) 
     { 
      int id; 
      if (context.Request.QueryString["id"].IndexOf('?') > 0) 
      { 
       id = Int32.Parse(context.Request.QueryString["id"].Split('?')[0]); 
      } 
      else 
      { 
       id = Int32.Parse(context.Request.QueryString["id"]); 
      } 

      dbclassDataContext db = new dbclassDataContext(); 
      photo d = (from p in db.photos 
         where p.id == id 
         select p).SingleOrDefault(); 

      if (d != null) 
      { 
       if (!String.IsNullOrEmpty(d.filename)) 
       { 
        img = Image.FromFile(file_path + "\\" + d.filename); 
        context.Response.ContentType = "image/" + d.filetype; 
        img.Save(context.Response.OutputStream, get_format(d.filetype)); 
       } 
       else 
       { 
        img = Image.FromFile(file_path + "\\no_image.jpg"); 
        context.Response.ContentType = "image/jpeg"; 
        img.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
       } 
      } 
      else 
      { 
       img = Image.FromFile(file_path + "\\no_image.jpg"); 
       context.Response.ContentType = "image/jpeg"; 
       img.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
      } 
     } 
     else 
     { 
      img = Image.FromFile(file_path + "\\no_image.jpg"); 
      context.Response.ContentType = "image/jpeg"; 
      img.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
     } 
     img.Dispose(); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 

    private ImageFormat get_format(string ftype) 
    { 
     switch (ftype) 
     { 
      case "jpeg": 
       return ImageFormat.Jpeg; 
      case "png": 
       return ImageFormat.Png; 
      case "gif": 
       return ImageFormat.Gif; 
      default: 
       return ImageFormat.Jpeg; 
     } 
    } 
} 

Я использую Linq тянуть расположение и тип из базы данных на основе пользователей ID, я затем вернуть изображение на странице запроса. Кажется, это работает нормально, но я включил его в случае, если могут быть какие-то проблемы, которые я забыл.

Вопрос

мне нужно динамически классифицировать изображения, основываясь на его размеры, я могу сделать это либо в коде .NET позади или с JQuery. Что я делаю неправильно с вышеуказанными методами, которые заставляют его работать неправильно?

ответ

1

Событие .load может иметь проблемы, если изображение загружено из кеша браузера (см. http://api.jquery.com/load-event/) - возможно, вы можете попробовать либо отключить кеширование, либо добавить значение времени к изображению, чтобы браузер не кэшировал его, в Дело в том, что это проблема?

+0

Я написал функцию для предотвращения кэширования, но забыл обернуть URL-адрес изображения в нем. : P Спасибо – jon3laze

 Смежные вопросы

  • Нет связанных вопросов^_^