2011-03-26 3 views
0

J'ai la configuration suivante. J'ai une application web et dans le .css de cette application je définis une image de fond à présenter lorsque je survole un élément.HttpHandler sur un fichier dans ASP.NET MVC

Je veux un script ou quelque chose de ce genre qui se trouve sur le serveur et lorsque l'on accède à l'image, il appelle une action sur l'application. Malheureusement, je n'ai aucune idée par où commencer.

Je veux savoir si et quelques conseils sur la façon d'écrire un composant côté serveur qui exécute une action dans une application web basée sur la demande d'un fichier par css.

Je suis sur Windows7, ASP.NET MVC.

EDIT

Alors, j'ai suivi vos suggestions sur l'utilisation httpHandlers. Cela semble être la solution parfaite. Cependant, je rencontre des problèmes.

J'ai suivi ce lien très utile http://www.phpvs.net/2009/08/06/aspnet-mvc-how-to-route-to-images-or-other-file-types/ mais j'étais juste incapable d'obtenir un coup sur une route

routes.Add("ImageRouting", new Route("Content/themes/base/images/{filename}.png", new ImageRouteHandler())); 

Mon seul autre itinéraire est celui généré par défaut par modèle MVC.

J'ai donc compris que les demandes à un fichier ne sont pas traitées par défaut par MVC. J'ai donc dû résoudre ce problème en définissant la propriété RouteExistingFiles du RouteCollection sur true.

Maintenant, je reçois des hits appropriés sur mes images, mais pour une raison quelconque, Site.css situé dans le dossier Content n'est pas utilisé pour le style du code HTML résultant.

Des suggestions?

+1

Voulez-vous dire par « lorsque l'image est accessible » lorsqu'elle est demandée par un client? Cela casserait, par exemple. si le navigateur précharge les ressources. Qu'est-ce que vous essayez d'atteindre, et OS et serveur web êtes-vous? –

Répondre

1

Ajouter un HttpHandler dans votre machine.config ou web.config comme ceci:

<httpHandlers> 
    <add verb="supported http verbs" path="path" type="namespace.classname, assemblyname" /> 
<httpHandlers> 

Votre verbe peut être "*" ou "GET", chemin égal à l'emplacement de l'image fichier sur le serveur, et remplissez les variables de type en fonction de votre espace de noms, la classe et la fonction de gestionnaire.

Pour une explication plus détaillée, voir: http://www.15seconds.com/issue/020417.htm

1

Si votre objectif est l'image dans le fichier CSS, vous pouvez faire un script gérer la portion de l'image utilisée dans votre fichier CSS mais cela ne sera pas déclenché chaque fois que le visiteur survolera un élément, et encore moins chaque fois qu'il chargera une nouvelle page en raison de la mise en cache, sauf si vous avez des règles strictes de non-mise en cache.

Si vous êtes plus intéressé à chaque fois que quelqu'un survole un élément, vous pouvez simplement déclencher une requête AJAX et partir de là.

$('.some-element').hover(function(){ $.get("spy.aspx"); }); 
+0

Je m'intéresse seulement à la manière de css, mais merci pour l'astuce utile au sujet de la mise en cache. – Trimack

Questions connexes