我正在构建一个带有客户端脚本的自定义控件,我希望使用ScriptManager.ScriptResourceMapping
来引用它(以使用Path
和DebugPath
属性。)
我希望自定义控件可以轻松移植到其他项目 - 即我想拖放代码隐藏文件(并最终使控件成为一个单独的DLL,但是现在拖放就足够了)。因此,我想避免(1)将客户端脚本作为嵌入式资源,(2)在WebResource
中引用为AssemblyInfo
,或者(3)在ScriptManager.ScriptResourceMapping.AddDefinition
中使用global.asax
{1}}。
简单来说,我可以将脚本管理代码放在自定义控件的代码中吗?
目前我收到一条错误,指出在程序集中找不到脚本引用,我想我的设置错误。
我的自定义控制代码如下:
Public Class MyControl
Inherits System.Web.UI.LiteralControl
Implements ISectionControl, IScriptControl
Private _scriptReference As ScriptReference
Public Sub New()
' Add the resource mapping
ScriptManager.ScriptResourceMapping.AddDefinition("MyControlScript", New ScriptResourceDefinition With {
.ResourceAssembly = System.Reflection.Assembly.GetExecutingAssembly,
.ResourceName = "MyControlScript.js",
.Path = "Path.To.MyControlScript.minimised.js",
.DebugPath = "Path.To.MyControlScript.original.js"
})
' Set the script reference
_scriptReference = New ScriptReference("MyControlScript.js", Assembly.GetExecutingAssembly.FullName)
End Sub
Protected Overrides Sub OnPreRender(e As System.EventArgs)
MyBase.OnPreRender(e)
' Register the script
ScriptManager.GetCurrent(Page).RegisterScriptControl(Of MyControl)(Me)
' Some code to set the Text of the literal control
' ...
End Sub
Public Function GetScriptDescriptors() As System.Collections.Generic.IEnumerable(Of System.Web.UI.ScriptDescriptor) Implements System.Web.UI.IScriptControl.GetScriptDescriptors
Return New ScriptDescriptor() {}
End Function
Public Function GetScriptReferences() As System.Collections.Generic.IEnumerable(Of System.Web.UI.ScriptReference) Implements System.Web.UI.IScriptControl.GetScriptReferences
Return New ScriptReference() {_scriptReference}
End Function
End Class
我希望这个问题有道理。感谢您花时间阅读。
阿里
答案 0 :(得分:2)
我自己回答了这个问题,我对ScriptReference
的程序集和构造函数感到困惑。我只想要一个带有(映射)名称的ScriptReference
,所以我使用空白构造函数然后设置Name
。然后我可以删除装配信息。
调整以下内容将问题排除在外:
Public Sub New()
' Add the resource mapping
ScriptManager.ScriptResourceMapping.AddDefinition("MyControlScript", New ScriptResourceDefinition With {
.Path = "Path.To.MyControlScript.minimised.js",
.DebugPath = "Path.To.MyControlScript.original.js"
})
' Set the script reference
_scriptReference = New ScriptReference() With {.Name="MyControlScript"}
End Sub