11 votes

Passage d'arguments à une fonction JavaScript depuis le code-behind

Je voudrais appeler une fonction javascript à partir d'un contrôle aspx. Par exemple, supposons que j'ai :

<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
<title>Untitled Page</title>
<script type="text/javascript">
    function test(x, y)
    {

    }
</script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" Text="Button"
         onclick="Button1_Click"/>
    </div>
    </form>
</body>
</html>

et dans le code derrière :

protected void Button1_Click(object sender, EventArgs e)
{
    // do stuff (really going to a database to fill x and y)
    int[] x = new int[] { 1, 2, 3, 4, 5 };
    int[] y = new int[] { 1, 2, 3, 4, 5 };

    // call javascript function as test(x,y);
}

Y a-t-il un moyen de le faire ?

1voto

sunny Points 11
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Call java script function on Code behind</title>
    <script  type="text/javascript">
    function abc()
    {
        var a=20;
        var b=30;
        alert("you enter"+a+":"+b);
    }
    </script>
</head>

code cs

protected void Page_Load(object sender, EventArgs e)
{
    TextBox2.Attributes.Add("onkeypress", "return abc();");
}

essayez ceci

0voto

Thomas Stock Points 4165

Je pense que vous voulez exécuter le javascript côté serveur et non dans le navigateur après le post-back, n'est-ce pas ?

Ce n'est pas possible, pour autant que je sache.

Si vous voulez simplement qu'il soit exécuté après le postback, vous pouvez faire quelque chose comme ceci :

this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "xx", "<script>test("+x+","+y+");</script>");

0voto

David Robbins Points 6773

Si vous êtes intéressé par le traitement de Javascript sur le serveur il existe une nouvelle bibliothèque open source appelée Jint qui vous permet d'exécuter du Javascript côté serveur. En fait, il s'agit d'un interpréteur Javascript écrit en C#. Je l'ai testé et jusqu'à présent, il semble assez prometteur.

Voici la description du site :

Différences avec les autres moteurs script :

Jint est différente car elle n'utilise pas de la technique du CodeDomProvider qui est utilisant la compilation sous le capot et conduit donc à des fuites de mémoire car les car les assemblages compilés ne peuvent pas être déchargés. De plus, l'utilisation de cette technique empêche l'utilisation de types dynamiques comme le fait JavaScript, permettant plus de flexibilité dans vos scripts. A l'opposé, Jint embarque sa propre logique d'analyse, et interprète vraiment interprète réellement les scripts. Jint utilise le célèbre ANTLR ( http://www.antlr.org ) à cette fin. Comme elle utilise Javascript comme langage, vous n'avez pas d'apprendre un nouveau langage, il s'est s'est avéré très puissant pour de script, et vous pouvez utiliser plusieurs éditeurs de texte pour le contrôle syntaxe.

0voto

Bhushan Mahajan Points 21
 <head>
    <script type="text/javascript">

        function test(x, y) 
        {
            var cc = "";
            for (var i = 0; i < x.length; i++) 
            {
                cc += x[i]; 
            }
            cc += "\ny: " + y; 
            return cc;
        }

    </script>

</head>

<body>

    <form id="form1" runat="server">

        <asp:Button ID="Button1" runat="server" Text="Button"   />

        <p>
             <asp:TextBox ID="TextBox1"  Name="TextBox1"  runat="server" AutoPostBack="True"  TextMode="MultiLine"></asp:TextBox>
        </p>

    </form>
</body>

protected void Page_Load(object sender, EventArgs e)
{
    int[] x = new int[] { 1, 2, 3, 4, 5 };
    int[] y = new int[] { 1, 2, 3, 4, 5 };

    string xStr = getArrayString(x); // converts {1,2,3,4,5} to [1,2,3,4,5]
    string yStr = getArrayString(y);

    string script = String.Format(" var y = test({0},{1}) ; ", xStr, yStr);
    script += String.Format("  document.getElementById(\"TextBox1\").value = y  ");

    this.Page.ClientScript.RegisterStartupScript(this.GetType(),  "testFunction", script, true);
  //  this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "testFunction", script, true); // different result
}

private string getArrayString(int[] array)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < array.Length; i++)
    {
        sb.Append(array[i] + ",");
    }
    string arrayStr = string.Format("[{0}]", sb.ToString().TrimEnd(','));
    return arrayStr;
}

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