编程语言
首页 > 编程语言> > javascript-如何为ASP.NET用户控件创建客户端API?

javascript-如何为ASP.NET用户控件创建客户端API?

作者:互联网

例如:我有一个用户控件,我们将其称为“ MyControl1”,我想创建“ Show()”和“ Hide()” javascript函数,这些函数可以从父页面上的javascript调用,例如“ MyControl1.Show”. ();”

显然,页面上可能有多个控件,因此,如果您在页面上放置了2个控件,则:

   <MyTag:MyControl ID="MyControl1" runat="server" />
   <MyTag:MyControl ID="MyControl2" runat="server" />

能够做类似的事情会很好:

   function ParentPageJavascriptFunction(){
      MyControl1.Show();
      MyControl2.Hide();
   }

我该怎么做呢?我发现的每一篇文章都是关于如何在用户控件中挂钩事件的,我只是希望父页面能够调用它认为合适的某些函数-也许有一种方法可以使用事件来完成我想做的事情是的,我只是不明白.

编辑:这似乎没有正确遇到,怎么样…

我的假设控件如下所示:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MyControl.ascx.cs" Inherits="controls_MyControl" %>

<script type="text/javascript">
    function Display(msg) {
        var Label1ClientID = '<%= Label1.ClientID %>';
        document.getElementById(Label1ClientID)... (display the message)
    } 
</script>

<asp:Label ID="Label1" runat="server"> </asp:Label>

现在,“父”页面将如下所示注册控件:

<%@ Register Src="~/controls/MyControl.ascx" TagName="MyControl" TagPrefix="MyTag" %>

在体内它具有:

<asp:Button ID="MyButton1" runat="server" Text="Display" OnClientClick="javascript:MyControl1.Display('hello'); return false;" />
    <MyTag:MyControl Id="MyControl1" runat="server">
    </MyTag:MyControl>

唯一的问题显然是行不通的-但这就是我要解决的问题.您如何进行这项工作?我希望能够允许用户控件嵌套在其中的页面(父页面)能够调用该用户控件的Display函数.我意识到您可以直接调用Display,因为它只是js(无论是否在用户控件中),但是如果该页面上有其中两个控件不起作用,那么如何创建JavaScript,使父级页面可以区分要调用的User Controls函数?

解决方法:

您的尝试非常简单. asp.net控件是将纯HTML包装到页面上的控件中的一种庞大方法.为了能够在控件上调用javascript事件,您必须知道控件呈现到页面的结果的ID.

注意:所有.net控件都有一个名为.ClientID的成员,该成员表示运行时将生成的内容,以作为旨在封装/呈现的HTML的ID.

为了在呈现控件时获得页面上控件的ID,您需要执行以下操作:

var dotNetHtmlClientID = '<%= txtMessage.ClientID %>';
$('#' + dotNetHtmlClientID).bind('onclick', function(){

    //dostuff

});

第一行是c#内联代码,用于从运行时获取ClientID.

更新**

如果要从其所在页面获取用户控件的clientID,则需要执行以下操作:

//在点网页服务器端

protected string controlClientId;

void Page_Load(object sender, Eventargs e)
{

     controlClientId = Page.FindControl("MyControlThatImBindingEventToDotNetId").ClientID;

}

//在页面客户端

var dotNetHtmlClientID = '<%= controlClientId %>';
$('#' + dotNetHtmlClientID).bind('onclick', function(){

    //dostuff

});

标签:user-controls,javascript,net
来源: https://codeday.me/bug/20191102/1991788.html