2014-01-23 2 views
2

У меня возникла проблема с использованием более одного экземпляра пользовательского элемента aspx на странице aspx. Это происходит, когда я пытался получить значение элемента управления пользователя через скрипт Java.Использование нескольких экземпляров пользовательского элемента aspx на странице aspx

Пользователь Код управления:

<script type="text/javascript"> 
    function ucFun() 
    { 
     var a = document.getElementById("<%=tbName.ClientID%>"); 
     alert(a.value); 
     return false; 
    } 
</script> 
<asp:Label Text="Name" runat="server" ID="lblname"></asp:Label> 
<asp:TextBox ID="tbName" runat="server" ></asp:TextBox> 
<asp:Button ID="btSubmit" runat="server" Text="Go" OnClientClick="ucFun()" /> 

Web Form Code

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <title></title> 
    </head> 
    <body> 
     <form id="form1" runat="server"> 
      <div> 
      <uc:cont runat="server" ID="ucID" /> 
       <uc:cont runat="server" ID="Cont1" /> 
       <uc:cont runat="server" ID="Cont2" /> 
      </div> 
     </form> 
    </body> 
</html> 

по нажатию на кнопку Go, она показывает нулевой ИНТ он окно предупреждения, так как элемент не определен. Однако, когда у меня есть один экземпляр элемента управления пользователя в форме, он правильно отобразил значение текстового поля.

Есть ли способ, мы должны написать это ..

+1

Как ваше имя функции не изменения, когда вы добавляете второй управляющий первую версию 'ucFun' является перезаписаны. –

+0

Спасибо Рубенсу за ответ. Если мне нужно проверить UC-поля, тогда мне нужно написать JS в значениях поля ввода UC. Использование нескольких экземпляров UC не удастся. Как мы можем добиться этого –

ответ

4

После поиска найдено другого разрешения.

http://www.aspsnippets.com/Articles/Issue-JavaScript-in-WebUserControl-not-working-when-used-multiple-times-on-same-page.aspx

Здесь они присоединять к UniqueID с яваскриптом именем, таким образом, нет никакого конфликта с JavaScripts.

UserControl.CS

protected string uniqueKey; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    this.uniqueKey = Guid.NewGuid().ToString("N"); 
    this.Button1.Attributes["onclick"] = "return DisplayMessage_" + uniqueKey + "();"; 
} 

UserControl.aspx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="UC_TestCS.ascx.cs" Inherits="UC_TestCS" %> 
<script type ="text/javascript"> 
function DisplayMessage_<%=uniqueKey %>() { 
    var message = document.getElementById("<%=TextBox1.ClientID %>").value; 
    alert(message); 
    return false; 
} 
</script> 
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
<asp:Button ID="Button1" runat="server" Text="Show Message" /> 
+0

это сработало, но когда на странице содержимого есть обратная передача, это не сработало, потому что uniqueKey изменен –

0

Обратитесь к аналогичному вопросу в посте

Javascript functions inside ASP.NET User Control

Вы должны использовать ClientScriptManager, как показано в примере ниже

<%@ Page Language="C#"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script runat="server"> 
    public void Page_Load(Object sender, EventArgs e) 
    { 
    // Define the name and type of the client scripts on the page. 
    String csname1 = "PopupScript"; 
    String csname2 = "ButtonClickScript"; 
    Type cstype = this.GetType(); 

    // Get a ClientScriptManager reference from the Page class. 
    ClientScriptManager cs = Page.ClientScript; 

    // Check to see if the startup script is already registered. 
    if (!cs.IsStartupScriptRegistered(cstype, csname1)) 
    { 
     String cstext1 = "alert('Hello World');"; 
     cs.RegisterStartupScript(cstype, csname1, cstext1, true); 
    } 

    // Check to see if the client script is already registered. 
    if (!cs.IsClientScriptBlockRegistered(cstype, csname2)) 
    { 
     StringBuilder cstext2 = new StringBuilder(); 
     cstext2.Append("<script type=\"text/javascript\"> function DoClick() {"); 
     cstext2.Append("Form1.Message.value='Text from client script.'} </"); 
     cstext2.Append("script>"); 
     cs.RegisterClientScriptBlock(cstype, csname2, cstext2.ToString(), false); 
    } 
    } 
</script> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
    <head> 
    <title>ClientScriptManager Example</title> 
    </head> 
    <body> 
    <form id="Form1" 
     runat="server"> 
     <input type="text" id="Message" /> <input type="button" value="ClickMe" onclick="DoClick()" /> 
    </form> 
    </body> 
</html> 
+0

Я понимаю, что мы можем ограничить регистрацию скриптов, зарегистрировав скрипты со стороны сервера. Однако мы не смогли получить соответствующие значения полей экземпляра, так как мы просто регистрируем один скрипт для одного экземпляра. Я имею в виду отображение <% = tbName.ClientID%> возвращает значение соответствующего поля экземпляра пользовательского элемента управления. –

+0

Это не затрагивает проблему, указанную в вопросе, это совершенно отдельная тема. – jtate

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