2017-02-10 66 views
0

我有一个用户控件,我想在页面上多次使用它。所以我尝试了将控件的JS移动到文件并为其创建原型的方法,以便它在页面上顺利运行。但在运行解决方案时,它提供了以下错误: 遗漏的类型错误:CtrlNameCtrlName1是不是构造使用javascript的ASP.Net:在Webform中使用多个控件实例

我没有能够找到我在哪里犯了一个错误。任何帮助将不胜感激。

谢谢。

用户控制使用标记:

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="CtrlName.ascx.vb" Inherits="MultiInstanceControl.CtrlName" %> 
<asp:TextBox ID="txtSearch" runat="server"></asp:TextBox> 
<br /> 
<asp:Panel ID="pnlSearch" runat="server" Style="background-color: yellow;width: 30px;height: 30px;"></asp:Panel> 
<br /> 
<input id="txtInput" type="text" /> 

<script type="text/javascript" src="CtrlNameJS.js"></script> 

<script type="text/javascript"> 

    function CtrlName<%=me.ClientID%>() { 
     this.pnlSearchClientID = <%=pnlSearch.ClientID%>; 
       this.txtSearchClientID = <%=txtSearch.ClientID%>; 
       this.txtInputControl = document.getElementById('txtInput'); 
       this.Category = <%=Category%>; 
    } 

    CtrlName<%=me.ClientID%> = CtrlName.prototype; 

</script> 

这里是它使用的JS文件内容:其使用上面的控制与多个实例

function CtrlName() { 
} 

CtrlName.prototype = { 
    HidePanel: function() { 
     if (Category == '1') { 
      pnlSearchClientID.style.backGroundColor = 'Red'; 
     } 
     else { 
      pnlSearchClientID.style.backGroundColor = 'Blue'; 
     } 
    }, 
    GetSearchedText: function() { 
     alert($find(txtSearchClientID).get_value()); 
    }, 
    GetInputText: function() { 
     alert(txtInputControl.value); 
    } 
}; 

终于页:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="default.aspx.vb" Inherits="MultiInstanceControl._default" %> 
<%@ Register Src="~/CtrlName.ascx" TagPrefix="uc1" TagName="CtrlName" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 1. First Instance <br /><br /> 
      <uc1:CtrlName ID="CtrlName1" IsMultipleFile="false" Category="1" runat="server" /> 
    <asp:Button runat="server" ID="btnTest1" Text="Get Value" OnClientClick="return btnTest_ClientClick('1');" /> 
     <br /><br /> 
<br /> 
     <br /><br /> <br /><br /> 
     2. Second Instance <br /><br /> 
      <uc1:CtrlName ID="CtrlName2" IsMultipleFile="false" Category="2" runat="server" /> 
    <asp:Button runat="server" ID="Button2" Text="Get Value" OnClientClick="return btnTest_ClientClick('2');" /> 

    </div> 

     <script type="text/javascript"> 

      var inst1 = new CtrlName<%=CtrlName1.ClientID %>(); 
      var inst2 = new CtrlName<%=CtrlName2.ClientID%>(); 

      function btnTest_ClientClick(strVal) { 
       if (strVal == '1') { 
        inst1.HidePanel(); 
        inst1.GetSearchedText(); 
        inst1.GetInputText(); 

       } 
       else { 
        inst2.HidePanel(); 
        inst2.GetSearchedText(); 
        inst2.GetInputText(); 
       } 
       return false; 
      } 


</script> 
    </form> 
</body> 
</html> 

回答

0

进行变量初始化加载像这样(用jQuery)所有脚本后:

$(document).ready(function()){ 
     var inst1 = new CtrlName<%=CtrlName1.ClientID %>(); 
     var inst2 = new CtrlName<%=CtrlName2.ClientID%>(); 

     function btnTest_ClientClick(strVal) { 
      if (strVal == '1') { 
       inst1.HidePanel(); 
       inst1.GetSearchedText(); 
       inst1.GetInputText(); 

      } 
      else { 
       inst2.HidePanel(); 
       inst2.GetSearchedText(); 
       inst2.GetInputText(); 
      } 
      return false; 
     } 
}; 
+0

甚至,这将引发错误: 遗漏的类型错误:CtrlNameCtrlName1不是在HTMLDocument的构造 。 (jquery.min.js:2) at k(jquery.min.js:2)(在j(jquery.min.js:2) – user2561997

相关问题