【问题标题】:How to execute javascript pageload event on multi instance web user control如何在多实例 Web 用户控件上执行 javascript pageload 事件
【发布时间】:2013-07-03 11:09:23
【问题描述】:

我正在开发一个 web 用户控件,我需要在页面加载(客户端页面加载)时设置一些属性。我的控件适用于页面上的一个实例。 但是当我需要在同一个页面上有多个该控件的实例时。页面加载事件仅在最后一个控件上显示效果。

我的控制

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControlLoadTest.ascx.cs" Inherits="WebUserControlLoadTest" ClientIDMode="Predictable" %>
<link rel="stylesheet" href="GridViewCSSThemes/YahooGridView.css" type="text/css" media="screen" />
<script runat="server" type="text/C#">
    static Int16 _count;
    public static Int16 count
    {
        get { return _count++; }
    }
</script>
<script type="text/javascript">
    function pageLoad() {
        document.getElementById('<%= Hidden_RowIndex.ClientID%>').value = '<%= count%>';
        document.getElementById('<%= txtUC.ClientID%>').value = "Count : " + document.getElementById('<%= Hidden_RowIndex.ClientID%>').value;
    }
</script>
<asp:HiddenField ID="Hidden_RowIndex" Value="" runat="server" />
<asp:TextBox ID="txtUC" CssClass="tb10" Enabled="false" runat="server"></asp:TextBox>

在aspx页面上使用控件

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ContextMenuTest.aspx.cs" Inherits="ContextMenuTest" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register TagPrefix="uc1" TagName="UCTest" Src="~/WebUserControlLoadTest.ascx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Java Script Load Test</title>
</head>
<body>
    <form id="form1" runat="server">
    <ajaxToolkit:ToolkitScriptManager runat="server" ID="ScriptManager1" EnablePageMethods="true" />
    <table style="padding:1%;width:100%;">
        <tr>
            <td>
                <uc1:UCTest runat="server" ID="UCTest1"/>
            </td>
        </tr>
        <tr>
            <td>
                <uc1:UCTest runat="server" ID="UCTest2"/>
            </td>
        </tr>
    </table>
    </form>
</body>

执行后的结果将是第一个控制中的 Count - 0 和第二个中的 Count - 1。 但它显示 1 Control 空白和第二个 Control -1 文本。 谁能告诉我如何在多实例 Web 用户控件中创建不同的 java-script 页面加载事件实例。

【问题讨论】:

    标签: c# javascript asp.net user-controls


    【解决方案1】:

    问题是

    static Int16 _count;
    public static Int16 count
    {
       get { return _count++; }
    }
    

    如果您多次声明控件,则每次呈现控件时都会覆盖计数器。

    您需要一个更智能的 Javascript,例如,在 WebUserControlLoadTest.ascx 内的控件包装器上添加一个类

    <div class="myControl">
       <asp:HiddenField ID="Hidden_RowIndex" Value="" runat="server" />
       <asp:TextBox ID="txtUC" CssClass="tb10" Enabled="false" runat="server">
       </asp:TextBox>
    </div>
    

    在 aspx 页面的顶部你可以有这个:

    $(document).ready(function(){
       var count = 0;
       $("myControl input:hidden").each(function(){$(this).value = count++});
    });
    

    【讨论】:

    • 很抱歉,但这是我的问题的答案。我需要知道如何在加载事件上为多实例 Web 用户控件实例化客户端(为每个 Web 用户实例单独加载事件控制)。我有一个解决方案,我会尽快发布该解决方案。感谢您的 rpl。
    猜你喜欢
    • 2012-10-30
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多