11 Stimmen

Übergabe von Argumenten an JavaScript-Funktionen aus Code-Behind

Ich möchte eine Javascript-Funktion von einem aspx-Steuerelement aufrufen. Zum Beispiel, angenommen, ich hatte:

<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>

und im Code dahinter:

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);
}

Gibt es eine Möglichkeit, dies zu tun?

1voto

sunny Punkte 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>

cs-Code

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

Versuchen Sie dies

0voto

Thomas Stock Punkte 10649

Ich denke, Sie wollen das Javascript serverseitig und nicht im Browser nach dem Post-Back ausführen, richtig?

Soviel ich weiß, ist das nicht möglich.

Wenn Sie nur wollen, dass es nach dem Postback ausgeführt wird, können Sie etwas wie folgt tun:

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

0voto

David Robbins Punkte 10000

Wenn Sie an der Verarbeitung von Javascript interessiert sind auf dem Server gibt es eine neue Open-Source-Bibliothek namens Jint die es Ihnen ermöglicht, serverseitiges Javascript auszuführen. Im Grunde ist es ein Javascript-Interpreter in C# geschrieben. Ich habe es getestet und bis jetzt sieht es recht vielversprechend aus.

Hier ist die Beschreibung der Website:

Unterschiede zu anderen Script-Engines:

Jint ist anders, denn es verwendet keine CodeDomProvider-Technik verwendet, die Kompilierung unter der Haube verwendet und zu Speicherlecks führt, da die kompilierten Assemblies nicht entladen werden können. Außerdem verhindert die Verwendung dieser Technik die Verwendung dynamischer Typen Variablen, wie es bei JavaScript der Fall ist, Dies ermöglicht mehr Flexibilität in Ihrem Skripten. Im Gegensatz dazu bettet Jint seine eigene Parsing-Logik ein, und interpretiert die Skripte. Jint verwendet das berühmte ANTLR ( http://www.antlr.org ) Bibliothek für diesen Zweck. Da sie Javascript als Sprache verwendet, müssen Sie nicht müssen Sie keine neue Sprache lernen, sie hat sich sich als sehr leistungsfähig für Skripting-Zwecke, und Sie können verschiedene Texteditoren für die Syntax Prüfung verwenden.

0voto

Bhushan Mahajan Punkte 71
 <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;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X