2010-02-04 8 views
1

J'ai un contrôle personnalisé qui a une ressource web dedans.WebResource est vierge page

Le WebResource est un fichier javascript et je l'option de compilation sur le fichier javascript réglé sur « ressources embedded » et je les lignes de code ci-dessous dans mes AssemblyInfo.cs pour le projet de mon contrôle personnalisé est:

// Export the MultiSelectGridView.js file 
[assembly: WebResource("SOM.DCO.CustomWebControls.MultiSelectGridView.js", "application/x-javascript")] 

dans mon contrôle personnalisé, j'ai les lignes en cas onload surchargée suivants:

private const string MULTISELECTGRIDVIEW_JS = "SOM.DCO.CustomWebControls.MultiSelectGridView.js"; 
Type t = this.GetType(); 
       string url = Page.ClientScript.GetWebResourceUrl(t, MULTISELECTGRIDVIEW_JS); 
       if (!Page.ClientScript.IsClientScriptIncludeRegistered(t, MULTISELECTGRIDVIEW_JS)) 
        Page.ClientScript.RegisterClientScriptInclude(t, MULTISELECTGRIDVIEW_JS, url); 

J'ai aussi essayé ce qui suit:

private const string MULTISELECTGRIDVIEW_JS = "SOM.DCO.CustomWebControls.MultiSelectGridView.js"; 
if (!Page.ClientScript.IsClientScriptIncludeRegistered(t, MULTISELECTGRIDVIEW_JS)) 
        Page.ClientScript.RegisterClientScriptResource(t, MULTISELECTGRIDVIEW_JS); 

Malheureusement, peu importe ce que je fais, la ressource web que je récupère est vide, et donc aucune des fonctions de mon fichier javascript n'est incluse/définie dans ma page de consommation.

Est-ce que quelque chose me manque?

Répondre

1

Eh bien, il se trouve que même si mon javascript était dans le "namespace" SOM.DCO.CustomWebControls, il était dans un dossier appelé "MultiSelectGridView". J'ai donc changé toutes les références de SOM.DCO.CustomWebControls.MultiSelectGridView.js à SOM.DCO.CustomWebControls.MultiSelectGridView.MultiSelectGridView.js et maintenant cela fonctionne.

1

La seule chose avec laquelle j'ai eu un problème dans le passé est de passer le mauvais Type lors de l'appel GetWebResourceUrl. Vous devez avoir le Type un Type qui provient du même assemblage que la ressource incorporée.

Utilisation this.GetType() peut présenter des problèmes de ressources intégration (as described by Rick Strahl)

Tout le reste semble ok pour moi.

3

Je viens d'avoir ce même problème et c'était un cauchemar pour comprendre la solution. J'ai finalement compris, grâce à this link.

Si vous cliquez avec le bouton droit sur le nom de votre solution dans l'Explorateur de solutions et choisissez "Propriétés", une zone de texte s'affiche pour "Espace de noms par défaut".

Cette valeur d'espace de noms par défaut doit être identique à l'espace de noms que vous placez devant votre ressource Web. Par conséquent, si l'espace de noms par défaut de vos propriétés est uniquement "SOM" ou uniquement "CustomWebControls", vous devez le remplacer par "SOM.DCO.CustomWebControls".

ensuite utiliser ce même espace de nom complet dans votre. « Assemblage: WebResource » et votre appel à RegisterClientScriptInclude (ou RegisterClientScriptResource, ou toute autre méthode que vous utilisez pour joindre la ressource Web