2012-07-19 6 views
0

J'ai une simple fenêtre pop-up JS "are you sure...", avec une liste déroulante et asp:button. Ce que je veux quand je clique sur le bouton est d'obtenir ce message:asp.net valeur de C# var dans JS

"Are you sure you want to perform <%= ACTION %>?"

où ACTION est une chaîne venant de dropdownlist.SelectedItem.Text.

Ce qui suit ne semble pas fonctionner:

OnClientClick="return confirm('Are you sure you want to perform <%= ACTION %>?); 

Il fait juste imprime la <%= ACTION %> au lieu de la valeur.

J'ai aussi essayé:

function testMe() { 
    return confirm('Are you sure you want to perform ' + document.getElementById('<%= hfAction.ClientID %>').value + '?'); 
} 

OnClientClick="testMe();" 

Mais les causes ci-dessus postback indépendamment de cliquer cancel ou OK.

Quelle est l'utilisation correcte?

+0

comment vous avez défini ACTION dans votre code C# – Habib

+0

oui c'est une chaîne simple. – user1468537

Répondre

2

Essayez ceci:

<asp:DropDownList runat="server" ID="ACTION"> 
    <asp:ListItem>Action 1</asp:ListItem> 
    <asp:ListItem>Action 2</asp:ListItem> 
</asp:DropDownList> 

<script type="text/javascript"> 
    function ExecuteConfirm() { 
     var ddlId = '<%= ACTION.UniqueID %>'; 
     var action = $("#" + ddlId + " option:selected").text(); 
     return confirm('Are you sure you want to perform ' + action + ' ?'); 
    } 
</script> 

<asp:Button runat="server" Text="Button" OnClientClick="return ExecuteConfirm();" /> 
+0

Erreur d'exécution Microsoft JScript: La valeur de la propriété '$' est nulle ou indéfinie, pas un objet Fonction – user1468537

+0

J'ai utilisé jquery sur mon exemple de code. Vous pouvez utiliser "var action = document.getElementById (ddlId) .value;" au lieu de l'équivalent qui contient le "var action = $ ..." –

+0

Ok, je manquais juste l'importation dans l'en-tête. Fonctionne bien maintenant. Merci :) – user1468537

2

Vous ne pouvez pas utiliser les balises de serveur dans les déclarations de contrôle du serveur. Définissez le script OnClientClick dans le code lors de l'initialisation de l'objet.

mybutton.OnClientClick 
    = string.format("return confirm('Are you sure you want to perform {0}?');", ACTION); 
+0

Cela n'a pas fonctionné non plus – user1468537

+0

Dans quel sens? Même problème? Erreur? –

1

Désolé, ma dernière réponse était complète des déchets (ne pense pas avant de poster). Qu'en est-il de cela (vous avez presque raison)?

function testMe() { 
    var val = document.getElementById('<%= hfAction.ClientID %>').value; 
    return confirm('Are you sure you want to perform ' + val + '?'); 
} 

OnClientClick="return testMe();" 

Vous venez de manquer le retour sur OnClientClick.

+0

Presque là. Le problème que j'ai est qu'il ne prend pas la nouvelle valeur de hfAction.value après que je sélectionne un autre élément sur le DDL. Si je fais un postback seulement alors il prend la valeur. Je l'ai défini comme suit: 'protected void ddlActions_SelectedIndexChanged (expéditeur d'objet, EventArgs e) { hfAction.Value = ddlActions.SelectedItem.Text; } ' – user1468537

+0

Ne pouvez-vous pas simplement interroger le DDL au lieu de hfAction? Donc document.getElementById ('ddlActions.ClientID'). Value? –