RadControl, который вы показываете выше, может быть реализован как ScriptControl вместо UserControl (с дополнительным файлом .ascx).
Возможно, вы уже знаете, что класс ScriptControl делаетименно то, что вы спрашиваете, и когда вы делаете $find(elementid)
, он возвращает фактический объект javascript элемента управления.
Проблема, которую я ненавижу с ScriptControl, заключается в том, что вам в основном приходится создавать элементы DOM вашего элемента управления программно, добавляяОбъекты .NET, такие как Table
и Label
, в коллекцию ChildControls
вашего элемента управления во время Load
или PreRender
Одна из работ, которую я видел, заключается в создании ScriptControl, который содержит ваши свойстваи методы, а затем оберните это с помощью ascx UserControl:
ScriptControl Пример:
public class MyScriptControl : System.Web.UI.ScriptControl
{
public string MyProperty { get; set; }
protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors()
{
//your implementations
}
protected override IEnumerable<ScriptReference> GetScriptReferences()
{
//your implementations
}
}
UserControl Пример:
public partial class MyUserControl : System.Web.UI.UserControl
{
protected override void OnLoad(EventArgs e)
{
this.MyLabel.Text = this.MySpecialScriptControl.MyProperty;
base.OnLoad(e);
}
}
.ascx Пример:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Example.ascx.cs" Inherits="Example" %>
<div>
<asp:Label id="MyLabel" runat="server" />
<my:MyScriptControl id="MySpecialScriptControl" runat="server" />
</div>
Это должно позволить вам получить как контроль над разметкой ascx, так и возможность в javascript сделать что-то вроде:
var myScriptControl = $find('MySpecialScriptControl');