asp.net Ajax 용 스크립트 컨트롤을 만들고 있는데 GetScriptReferences()
함수를 호출 할 수 있지만 GetScriptDescriptors()
을 가져올 수 없습니다.GetScriptDescriptors가 스크립트 컨트롤에서 호출되지 않습니다.
나는 ScriptControl
, ScriptControlBase
, IScriptControl
에서 파생 해 봤습니다. 페이지 스크립트 관리자로 컨트롤을 등록 할 수 있지만 함수를 호출 할 수 없습니다.
나는 무엇을 놓쳤을지도 모릅니다. 당신이 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];
}
}
렌더 컨트롤을 오버라이드하지 않고 base.Render를 호출하지 않는 한 스크립트 컨트롤이 렌더에서 메서드를 호출하기 때문에 스크립트 컨트롤이 작동해야합니다 ... –