When creating a custom task or other component that will plug into a
web application it is often useful to embed the resources for that
component in the assembly itself. This greatly simplifies deployment
because you will only need to deploy the assembly instead of all the
external resources like JS files or images.
Here are some simple instructions for using embedded resources.
- Add the resource to the project (Right-click the project in the solution explorer and click Add > Existing item).
- Set the Build Action property of the file to Embedded Resource. (Right-click the file in the solution explorer and click Properties).
- Add a WebResource attribute to AssemblyInfo.cs. Like this:
[assembly: System.Web.UI.WebResource("esri_samples.esriZoomIn.png", "img/png")]
In this example esri_samples is the default names namespace. To see the default namespace right-click your project in the solution explorer and click Properties. The default namespace can be found on the Application tab. esriZoomIn.png is the name of the file. img/png is the type. Below is another example for a javascript file.
[assembly: System.Web.UI.WebResource("stl_samples.clipboard.js", "text/javascript")]
In this example stl_samples is the default namespace and notice the type is now text/javascript.
-
Use the ClientScript manager to use the resource.
-
For images the GetWebResourceUrl method will get you a URL to the
image. For example the following code gets a url for the esriZoomIn
image embedded above.
string sZoomUrl =
Page.ClientScript.GetWebResourceUrl(this.GetType(), "esri_samples.esriZoomIn.png");
-
For JavaScript, you need to specify where you want the file included
in the page. First you get a URL for the resource like the image example
above, then you use the ScriptManager to register the client script. If
you want the script to be executed when the page loads, use
RegisterStartupScript. RegisterStartupScript will insert the script at
the bottom of the form (just before the </form>), so it will be
executed after the rest of the DOM elements on the page are loaded.
If you want to include JavaScript that can be called from events on the page, use RegisterClientScriptInclude. This adds a script within the form where the control tag is located.
With each approach the JavaScript is executed when the parser hits the tag. The important thing is that you don’t try to access, for instance, DOM elements from a script registered using RegisterClientScriptInclude, because those DOM elements might not be available. So these scripts are often used for declaring a set of script methods/classes for later use. Of course the major difference with RegisterClientScriptInclude is that it references a file where RegisterStartupScript contains a piece of JavaScript (it could just as well be a JavaScript file you reference, although this is not the intended way of using it). Each of these registration methods should be called in the PreRender event of the control or page. Below is an example of adding the clipboard.js file to the page.
protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); //Embed the javascript in the page string scriptLocation =
this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "stl_samples.clipboard.js"); this.Page.ClientScript.RegisterClientScriptInclude("SharedLocationTaskScripts", scriptLocation); }
-
For images the GetWebResourceUrl method will get you a URL to the
image. For example the following code gets a url for the esriZoomIn
image embedded above.
Some related reading you might find useful:
- Microsoft documentation: How to embed resources in ASP.NET 2.0 assemblies
- ASP Alliance article: Embedding Resources in ASP.NET 2.0 Assemblies
No comments:
Post a Comment