如何在同一网页上多次使用 WebUserControl
How to use WebUserControl multiple times on same web page
在 Asp.net 网页上工作 application.I 有一个用户 WebUserControl,它包含两个文本框和一对 javascript 语法,我的控件将一个文本框信息复制到另一个文本中 box.Problem 当我在同一个页面上多次使用我的用户控件时出现。
多次使用后我的用户控件无法正常工作,如何解决这个问题
我的用户控件语法:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="transferControl.ascx.cs" Inherits="testControl.transferControl" %>
<script type="text/javascript">
function IsAccNumberValid(txtAccountNumber) {
debugger;
document.getElementById("<%= txtTo.ClientID %>").value = txtAccountNumber.value;
}
</script>
<asp:TextBox runat="server" ID="txtFrom" onblur="Javascript:IsAccNumberValid(this);" />
<asp:TextBox ID="txtTo" runat="server"></asp:TextBox>
我使用的页面语法:
<%@ Register src="transferControl.ascx" tagname="transferControl" tagprefix="uc1" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<uc1:transferControl ID="transferControl1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" />
<uc1:transferControl ID="transferControl2" runat="server" />
</asp:Content>
像这样更改您的用户控制代码。以下代码将 IsAccNumberValid() 函数替换为直接 Javascript 语句。所以不会有任何重复的函数定义。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="transferControl.ascx.cs" Inherits="testControl.transferControl" %>
<asp:TextBox runat="server" ID="txtFrom" />
<asp:TextBox ID="txtTo" runat="server" ></asp:TextBox>
<script type="text/javascript">
var txtFrom = document.getElementById("<%= txtFrom.ClientID %>");
var txtTo = document.getElementById("<%= txtTo.ClientID %>");
txtFrom.onblur = function () {
txtTo.value = txtFrom.value;
}
</script>
一般的解决方案是使用唯一密钥。
在后台代码中生成唯一键 (C#):
protected string uniqueKey;
protected void Page_Load(object sender, EventArgs e)
{
this.uniqueKey = Guid.NewGuid().ToString("N");
}
使用 javascript 函数名称或 html 元素 ID 的键使其唯一:
<script type="text/javascript">
function DisplayMessage_<%=uniqueKey %>() {
var message = document.getElementById("<%=TextBox1.ClientID %>").value;
alert(message);
return false;
}
</script>
<div id="myDiv_<%=uniqueKey %>">Test</div>
查看 link 了解更多详情。
在 Asp.net 网页上工作 application.I 有一个用户 WebUserControl,它包含两个文本框和一对 javascript 语法,我的控件将一个文本框信息复制到另一个文本中 box.Problem 当我在同一个页面上多次使用我的用户控件时出现。 多次使用后我的用户控件无法正常工作,如何解决这个问题
我的用户控件语法:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="transferControl.ascx.cs" Inherits="testControl.transferControl" %>
<script type="text/javascript">
function IsAccNumberValid(txtAccountNumber) {
debugger;
document.getElementById("<%= txtTo.ClientID %>").value = txtAccountNumber.value;
}
</script>
<asp:TextBox runat="server" ID="txtFrom" onblur="Javascript:IsAccNumberValid(this);" />
<asp:TextBox ID="txtTo" runat="server"></asp:TextBox>
我使用的页面语法:
<%@ Register src="transferControl.ascx" tagname="transferControl" tagprefix="uc1" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<uc1:transferControl ID="transferControl1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" />
<uc1:transferControl ID="transferControl2" runat="server" />
</asp:Content>
像这样更改您的用户控制代码。以下代码将 IsAccNumberValid() 函数替换为直接 Javascript 语句。所以不会有任何重复的函数定义。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="transferControl.ascx.cs" Inherits="testControl.transferControl" %>
<asp:TextBox runat="server" ID="txtFrom" />
<asp:TextBox ID="txtTo" runat="server" ></asp:TextBox>
<script type="text/javascript">
var txtFrom = document.getElementById("<%= txtFrom.ClientID %>");
var txtTo = document.getElementById("<%= txtTo.ClientID %>");
txtFrom.onblur = function () {
txtTo.value = txtFrom.value;
}
</script>
一般的解决方案是使用唯一密钥。
在后台代码中生成唯一键 (C#):
protected string uniqueKey;
protected void Page_Load(object sender, EventArgs e)
{
this.uniqueKey = Guid.NewGuid().ToString("N");
}
使用 javascript 函数名称或 html 元素 ID 的键使其唯一:
<script type="text/javascript">
function DisplayMessage_<%=uniqueKey %>() {
var message = document.getElementById("<%=TextBox1.ClientID %>").value;
alert(message);
return false;
}
</script>
<div id="myDiv_<%=uniqueKey %>">Test</div>
查看 link 了解更多详情。