簡體   English   中英

將JavaScript附加到ASCX客戶端實例的原型

[英]Attaching JavaScript to the prototype of an ASCX client side instance

我該如何編碼我的ASCX控件,以便我可以提供一個ID並從瀏覽器運行一些JavaScript,例如

$find('myASCXControlClientId')

和返回的對象,是否具有帶有原型的類,該類帶有我的自定義javascript方法,可以在控件的所述實例上調用它?

Telerik控件(例如RadTreeView)可以執行此操作

在此處輸入圖片說明

他們使用Javascript獲取的控件具有一個原型,其中包含一些定義明確的方法。 如何使用ASCX做到這一點?

您在上面顯示的RadControl可能已實現為ScriptControl而非UserControl(具有額外的.ascx文件)。

您可能已經知道ScriptControl類完全符合您的要求,並且當您執行$find(elementid)它會返回控件的實際javascript對象。

我討厭ScriptControl的問題是,您基本上必須通過在LoadPreRender期間將TableLabel類的.NET對象添加到控件的ChildControls集合中,以編程方式構建控件的DOM元素。

我見過的工作之一是創建一個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');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM