56 votes

Comment appeler une fonction javascript depuis le code-behind ?

J'ai écrit un javascript avec une page asp.net.

Dans une page Asp.net

<HTML> <HEAD>
     <script type="text/javascript">
      function Myfunction(){
          document.getElementId('MyText').value="hi";
      }
      </script>
</HEAD> <BODY>
<input type="text" id="MyText" runat="server" /> </BODY>

Dans Code-behind

 Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
  Handles Me.Load
       If Session("My")= "Hi" Then
          I want to call "Myfunction" javascript function
       End If 
 End Sub

Comment puis-je faire ?

2 votes

3 votes

Voulez-vous vraiment appeler la fonction depuis le code-behind, ou voulez-vous que la fonction s'exécute au chargement de la page ? Je pense que c'est la dernière alternative que vous voulez.

80voto

Jacob Points 33729

Une façon de le faire est d'utiliser l'option ClientScriptManager :

Page.ClientScript.RegisterStartupScript(
    GetType(), 
    "MyKey", 
    "Myfunction();", 
    true);

2 votes

Il semble que la meilleure solution soit la vôtre, mais que signifie "MyKey" ?

5 votes

La clé est juste un identifiant unique pour éviter d'émettre deux fois le même script. Cela peut être n'importe quoi.

0 votes

La meilleure solution, très simple

44voto

Deepak Kothari Points 101

Il s'agit d'un moyen d'invoquer une ou plusieurs méthodes JavaScript à partir du code derrière. En utilisant le gestionnaire script, nous pouvons appeler les méthodes en séquence. Considérons par exemple le code ci-dessous.

ScriptManager.RegisterStartupScript(this, typeof(Page), "UpdateMsg", 
    "$(document).ready(function(){EnableControls();
    alert('Overrides successfully Updated.');
    DisableControls();});", 
true);

Dans cette première méthode, EnableControls() est invoquée. Ensuite, l'alerte sera affichée. Ensuite, la méthode DisableControls() est invoquée.

14voto

evaaggy Points 41

Il existe un moyen très simple de le faire. Il s'agit d'injecter un code javascript dans un contrôle d'étiquette à partir d'un code arrière. Voici un exemple de code :

<head runat="server"> 
    <title>Calling javascript function from code behind example</title> 
        <script type="text/javascript"> 
            function showDialogue() { 
                alert("this dialogue has been invoked through codebehind."); 
            } 
        </script> 
</head>

..........

lblJavaScript.Text = "<script type='text/javascript'>showDialogue();</script>";

Consultez le code complet ici : http://softmate-technologies.com/javascript-from-CodeBehind.htm (mort)
Lien depuis Internet Archive : https://web.archive.org/web/20120608053720/http://softmate-technologies.com/javascript-from-CodeBehind.htm

2 votes

Malheureusement, le lien est cassé :-(

0 votes

J'adore cette solution - j'ai presque l'impression de tricher. Je pense qu'elle ne convient pas à tous les scénarios, mais j'ai du mal à imaginer un cas où elle ne fonctionnerait pas.

1voto

Si l'ordre d'exécution n'est pas important et que vous avez besoin d'un javascript ET d'un codebehind à déclencher sur un élément asp, voici ce que vous pouvez faire.

Ce que vous pouvez retenir de mon exemple : J'ai un div qui couvre le contrôle ASP à partir duquel je veux que le javascript et le codebehind soient exécutés. La méthode onClick du div ET l'événement OnSelectionChanged du calendrier sont tous deux déclenchés de cette façon.

Dans cet exemple, j'utilise un contrôle de calendrier ASP, et je le contrôle à la fois à partir de javascript et de codebehind :

Code frontal :

        <div onclick="showHideModal();">
            <asp:Calendar 
                OnSelectionChanged="DatepickerDateChange" ID="DatepickerCalendar" runat="server" 
                BorderWidth="1px" DayNameFormat="Shortest" Font-Names="Verdana" 
                Font-Size="8pt" ShowGridLines="true" BackColor="#B8C9E1" BorderColor="#003E51" Width="100%"> 
                <OtherMonthDayStyle ForeColor="#6C5D34"> </OtherMonthDayStyle> 
                <DayHeaderStyle  ForeColor="black" BackColor="#D19000"> </DayHeaderStyle>
                <TitleStyle BackColor="#B8C9E1" ForeColor="Black"> </TitleStyle> 
                <DayStyle BackColor="White"> </DayStyle> 
                <SelectedDayStyle BackColor="#003E51" Font-Bold="True"> </SelectedDayStyle> 
            </asp:Calendar>
        </div>

Codebehind :

        protected void DatepickerDateChange(object sender, EventArgs e)
        {
            if (toFromPicked.Value == "MainContent_fromDate")
            {
                fromDate.Text = DatepickerCalendar.SelectedDate.ToShortDateString();
            }
            else
            {
                toDate.Text = DatepickerCalendar.SelectedDate.ToShortDateString();
            }
        }

0voto

programmer Points 649

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X