Einige andere Dinge habe ich herausgefunden:
Sie können ein Array nicht direkt übergeben, wie:
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "xx",
"<script>test("+x+","+y+");</script>");
weil das die ToString()-Methoden von x und y aufruft, die "System.Int32[]" zurückgeben, und offensichtlich kann Javascript das nicht verwenden. Ich musste die Arrays als Strings übergeben, z. B. "[1,2,3,4,5]", also schrieb ich eine Hilfsmethode, um die Konvertierung durchzuführen.
Außerdem gibt es einen Unterschied zwischen this.Page.ClientScript.RegisterStartupScript() und this.Page.ClientScript.RegisterClientScriptBlock() - Ersteres platziert das Skript am unteren Ende der Seite, was ich brauche, um auf die Steuerelemente zugreifen zu können (wie mit document.getElementByID). RegisterClientScriptBlock() wird ausgeführt, bevor die Tags gerendert werden, so dass ich tatsächlich einen Javascript-Fehler erhalte, wenn ich diese Methode verwende.
http://www.wrox.com/WileyCDA/Section/Manipulating-ASP-NET-Pages-and-Server-Controls-with-JavaScript.id-310803.html deckt den Unterschied zwischen den beiden ziemlich gut ab.
Hier ist das vollständige Beispiel, das ich mir ausgedacht habe:
// code behind
protected void Button1_Click(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("test({0},{1})", xStr, yStr);
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;
}
//aspx page
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript">
function test(x, y)
{
var text1 = document.getElementById("text1")
for(var i = 0; i<x.length; i++)
{
text1.innerText += x[i]; // prints 12345
}
text1.innerText += "\ny: " + y; // prints y: 1,2,3,4,5
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button"
onclick="Button1_Click" />
</div>
<div id ="text1">
</div>
</form>
</body>
</html>