2009-01-29 4 views
5

J'ai un problème dans mon application C# ASP.NET, où les balises id et name sont modifiées à l'exécution avec respectivement les préfixes "MainView_" et "MainView $". Donc, mon code:attributs d'ID et de nom des éléments HTML manipulés par ASP.NET

<asp:Button ID="OKToContinueCheckInButton" runat="server" CausesValidation="False" Visibility="false" Style="display: none" OnClick="btnOKToContinueCheckIn" /> 

<script type="text/javascript"> 
<!-- 
    var answer = confirm("Some Warning"); 
    if (answer) 
     document.getElementById('OKToContinueCheckInButton').click(); 
// --> 
</script> 

devient:

<input type="submit" name="MainView$OKToContinueCheckInButton" value="" id="MainView_OKToContinueCheckInButton" Visibility="false" style="display: none" /> 

<script type="text/javascript"> 
<!-- 
    var answer = confirm("Some Warning"); 
    if (answer) 
     document.getElementById('OKToContinueCheckInButton').click(); 
// --> 
</script> 

getElementID() retourne null parce que le nom a changé. Quelqu'un peut-il me dire pourquoi cela se produit et s'il y a un moyen de le désactiver éventuellement de changer les valeurs d'identification et de nom. Merci!

-Sephrial

Répondre

10

Je pense que cela pourrait vous aider ...

<script type="text/javascript"> 
<!-- 
    var answer = confirm("Some Warning"); 
    if (answer) 
     document.getElementById('<%= OKToContinueCheckInButton.ClientID %>').click(); 
// --> 
</script> 

Ceci est la partie qui fait l'affaire

<%= OKToContinueCheckInButton.ClientID %> 
+1

qui est ce qu'elle a dit! –

1
<asp:Button ID="OKToContinueCheckInButton" runat="server" CausesValidation="False" Visibility="false" Style="display: none" OnClick="btnOKToContinueCheckIn" /> 

<script type="text/javascript"> 
<!-- 
    var answer = confirm("Some Warning"); 
    if (answer) 
     document.getElementById(<%=OKToContinueCheckInButton.ClientID %>).click(); 
// --> 
</script> 
3

Ceci est un élément fondamental de le fonctionnement du modèle Asp .Net Forms.

Les ID sont modifiés de sorte que vous n'avez pas à vous soucier de garder ID unique à travers les contrôles utilisateur, les contrôles personnalisés, etc. répéteurs

Vous pouvez utiliser la méthode de Cyril. Je trouve aussi que JQuery convient très bien à ce modèle parce que vous pouvez facilement référencer les contrôles par leur classe ou leur position dans le document.

1

Écrivez votre script à partir du code derrière. Enregistrez-le en tant que script de démarrage et utilisez l'ID client de l'objet.

System.Text.StringBuilder script = new System.Text.StringBuilder(); 
script.Append("var answer = confirm('Some Warning');"); 
script.Append("if (answer)"); 

// The client ID will be what is put in the browser so it will find it. 
script.AppendFormat("document.getElementById('{0}').click();", this.btnSomeButton.ClientID); 

// Hook this up to the button 
this.btnSomeButton.OnClientClick = script.ToString(); 
+0

Pourquoi voudriez-vous qu'il fasse quelque chose qui ne peut pas être maintenu? –

1

Vous devez utiliser la propriété ClientID comme ceci:

<asp:Button ID="OKToContinueCheckInButton" runat="server" CausesValidation="False" Visibility="false" Style="display: none" OnClick="btnOKToContinueCheckIn" /> 

<script type="text/javascript"> 
<!-- 
    var answer = confirm("Some Warning"); 
    if (answer) 
     document.getElementById(<%=OKToContinueCheckInButton.ClientID%>).click(); 
// --> 
</script> 
0

Merci pour toutes vos réponses, je pense que je comprends pourquoi les valeurs sont remplacées. Cependant, quand j'ai essayé les solutions ci-dessus, il donne une erreur car il produit le HTML suivant avec un '_' au lieu d'un '$'. J'utilisais, document.getElementById (<% = OKToContinueCheckInButton.ClientID%>). Click();

<input type="submit" name="MainView$OKToContinueCheckInButton" value="" id="MainView_OKToContinueCheckInButton" Visibility="false" style="display: none" /> 

<script type="text/javascript"> 
<!-- 
    var answer = confirm("Some Warning"); 
    if (answer) 
     document.getElementById(MainView_OKToContinueCheckInButton).click(); 
// --> 
</script> 
2

Je pense que vous avez oublié les guillemets simples:

document.getElementById(<%= OKToContinueCheckInButton.ClientID %>).click(); 

devrait être:

document.getElementById('<%= OKToContinueCheckInButton.ClientID %>').click(); 
1

Si vous êtes prêt à utiliser jQuery, ce n'est pas un problème du tout, et vous N'ayez pas à vous soucier de changer de nom. En utilisant le $ = (se termine par) sélecteur, ce sera problème NOE:

if (answer) 
    $("a[id$='MainView_OKToContinueCheckInButton']:first").click(); 

sélecteurs de jQuery sont très faciles à travailler avec

Questions connexes