– Multiple ScriptControl instances sharing variable – Education Career Blog

I have a ScriptControl that uses an image as an embedded resource and GetWebResourceUrl to generate the WebResource.axd URL. I am currently using GetScriptDescriptors() to send the URL to the JavaScript object.

The ScriptControl can be in a Repeater, so you may have 20+ instances. They all use the same images (not customizable through property), so I would like to set the URL once in a variable and share it. I know I could register a script block with a global variable, but would like to avoid that if possible. Is there a way to set a variable within the scope of the control type (global -> control type -> control instance)?


This seems to work well:

        string imagesScript = String.Format(
            "MyNamespace.MyClass.prototype.imgDisabled = '{0}';" +
            "MyNamespace.MyClass.prototype.imgEnabled = '{1}';",
            Page.ClientScript.GetWebResourceUrl(typeof(MyClass), "MyNamespace.disabled.png"),
            Page.ClientScript.GetWebResourceUrl(typeof(MyClass), "MyNamespace.enabled.png")

        Page.ClientScript.RegisterStartupScript(typeof(MyClass), "Images", imagesScript, true);

Then in my object I just do this.imgDisabled or this.imgEnabled to get the URLs.

Edit: Another option is in AssemblyInfo.cs you set the JavaScript reference to WebResource(..., PerformSubstitution = true) then your .js file can have <%= WebResource("MyNamespace.enabled.png") %> anywhere you wish. This can be where you actually use it or adding to the object prototype.

Leave a Comment