2014-11-29 4 views
1

Я пытаюсь использовать несколько экземпляров элемента управления ascx на одной странице. Работает только последний элемент управления на странице. Я понимаю из этого поста [Asp.Net User Control does not work correctly when multiple are added to one form, что проблема связана с идентификаторами; каким-то образом я пытаюсь повторно использовать идентификаторы, а редактируемый отредактированный элемент не ссылается правильно. Однако код на этой странице сложный, и я не понимаю ответов. Я создал небольшой пример моей проблемы, чтобы продемонстрировать.Как ссылаться на несколько идентичных элементов управления пользователя на странице

Вот мой пользовательский элемент управления:

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="testControl.ascx.vb" Inherits="Tempusforms.testControl" %> 
 
    <script type="text/javascript"> 
 
     function getValue() { 
 
      document.getElementById("<%=Label1.ClientID %>").innerHTML = getIndex(); 
 
     } 
 
     function getIndex() { 
 
      return document.getElementById("<%=droppit.ClientID %>").selectedIndex; 
 
     } 
 
    </script> 
 

 
    <span> 
 
    \t \t  <asp:DropDownList ID="droppit" runat="server" OnChange="getValue();" > 
 
       <asp:ListItem Value="Select a Value"></asp:ListItem>    
 
       <asp:ListItem Value="one"></asp:ListItem> 
 
       <asp:ListItem Value="two"></asp:ListItem> 
 
       <asp:ListItem Value="three"></asp:ListItem> 
 
      </asp:DropDownList> 
 
     
 
    </span>&nbsp;Index Value = 
 
    <span> 
 
     <asp:label ID="Label1" runat="server" Text="mylabel" ></asp:label>   
 
    </span>

Вот страница, которая использует элементы управления:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="userControlTest.aspx.vb" Inherits="Tempusforms.userControlTest" %> 
 
<%@ Register src="../Common/testControl.ascx" tagname="testControl" tagprefix="uc1" %> 
 
<!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></title> 
 
</head> 
 
<body> 
 
    <form id="form1" runat="server"> 
 
    <div> 
 

 
     <uc1:testControl ID="testControl1" runat="server" /> 
 
      <br /><br /> 
 
     <uc1:testControl ID="testControl2" runat="server" /> 
 

 
    </div> 
 
    </form> 
 
</body> 
 
</html>

Можете ли вы Sh я должен сделать эту работу?

Благодарим за помощь.

ответ

1

ASP.NET генерирует разные идентификаторы, которые включают идентификатор UserControl, поэтому идентификаторы здесь не являются проблемой.

Однако проблема связана с кодом JS, который вы включаете в User Control. Из-за этого это происходит неоднократно, и из-за этого происходят плохие вещи.

Вы должны получить эти сценарии вне пользовательского элемента управления и изменить их для использования параметров.

Что-то вроде:

<script type="text/javascript"> 
    function getValue(ctrlID) { 
     document.getElementById(ctrlID).innerHTML = getIndex(ctrlID); 
    } 
    function getIndex(ctrlID) { 
     return document.getElementById(ctrlID).selectedIndex; 
    } 
</script> 

И вы можете вызывать эти функции из пользовательского элемента управления, как это: OnChange="getValue(this.id);"

+0

Да, спасибо. Он работает так, как вы сказали. – timeKeeper

Смежные вопросы