我正在为 asp.net Ajax 构建脚本控件,虽然我可以调用 GetScriptReferences()
函数,但我无法调用 GetScriptDescriptors()
.
我已经尝试从 ScriptControl
、ScriptControlBase
、IScriptControl
派生。我正在使用页面脚本管理器注册控件,但我仍然无法调用要调用的函数?
关于我可能错过的任何想法?
public class FilterGroupingControl : CompositeControl, IScriptControl
{
public List<FilterGrouping> Groupings { get; set; }
public FilterGroupingControl()
{
this.Groupings = new List<FilterGrouping>();
}
protected override void OnPreRender(EventArgs e)
{
#region register control with script manager
ScriptManager scriptManager = ScriptManager.GetCurrent(Page);
if (scriptManager == null)
throw new InvalidOperationException("There must be a script manager on the page");
scriptManager.RegisterScriptControl(this);
#endregion
base.OnPreRender(e);
}
public IEnumerable<ScriptDescriptor> GetScriptDescriptors()
{
throw new InvalidOperationException();
ScriptControlDescriptor d = new ScriptControlDescriptor("Web.UI.Controls.FilterGroupingControl", this.ClientID);
d.AddProperty("Groupings", this.Groupings.ToArray());
return new ScriptDescriptor[] { d };
}
public IEnumerable<ScriptReference> GetScriptReferences()
{
// throw new InvalidOperationException();
return new ScriptReference[0];
}
}
最佳答案
如果您使用 IScriptControl
,则必须将其添加到渲染进程中:
if (!this.DesignMode)
{
ScriptManager.GetCurrent(this.Page).RegisterScriptDescriptors(this);
}
如此处所述:GetScriptReferences does not get called
RegisterScriptControl
将脚本通知脚本管理器,并调用 GetScriptReferences。您需要调用 RegisterScriptDescriptors
来处理组件注册,以及随后在客户端调用 $create
方法。
关于asp.net - 未在脚本控件上调用 GetScriptDescriptors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3058989/