Ich habe eine ASHX-Handler ein Bild beim Laden der Seite zurückgeben. Ich muss dem Bild dynamisch eine Klasse hinzufügen, abhängig von den Abmessungen des Bildes. Ich habe versucht, dies zu tun, die folgenden Methoden:ashx Kontrolle Bild zurück, jquery Größe beim Laden oder .NET OnLoad Methoden nicht funktioniert
-Code Behind-Methode
cs
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" />
Diese auf Anfangslast arbeitet, jedoch auf Postbacks (Upload eines neuen i mage/rotieren/beschneiden) kann die Klasse nicht korrekt angewendet werden.
jQuery-Methode
js
$(window).load(function(){
$('#image1').load(function() {
if($(this).width() > $(this).height())
{
$(this).attr('class', 'landscape');
} else {
$(this).attr('class', 'portrait');
}
});
});
Diese Methode überhaupt nicht funktioniert, hat das Bild keine Klasse zugeordnet. Ich bin mir nicht sicher, ob dies ein Timing-Problem mit der Ashx-Kontrolle oder was ist.
ASHX-Code
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;
}
}
}
ich Linq bin mit dem Standort und die Art aus der Datenbank auf der Benutzer-ID basiert ziehen, kehre ich dann das Bild an die anfragende Seite. Dies scheint gut zu funktionieren, aber ich habe es für den Fall eingeschlossen, dass es irgendwelche Probleme geben könnte, die ich übersehen habe.
Frage
Ich brauche das Bild dynamisch zu klassifizieren, basierend auf seinen Dimensionen, kann ich dies entweder in .NET-Code hinter oder mit jQuery. Was mache ich falsch mit den oben genannten Methoden, die dazu führen, dass es nicht richtig funktioniert?
Ich habe eine Funktion geschrieben, die das Zwischenspeichern verhindert, aber vergessen habe, die Bild-URL darin zu verpacken. : P Danke – jon3laze