Multiple ScriptControl instances sharing variable
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
ca开发者_如何学编程n 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.
精彩评论