簡體   English   中英

如何在多實例Web用戶控件上執行javascript Pageload事件

[英]How to execute javascript pageload event on multi instance web user control

我正在為此開發一個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個空白控件,第二個帶有-1控件文本。 誰能告訴我如何在多實例Web用戶控件中創建不同的Java腳本頁面加載事件實例。

問題是

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++});
});

暫無
暫無

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

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