einige andere Dinge, die ich herausgefunden:
Sie können nicht direkt in einem Array übergeben werden wie:
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "xx",
"<script>test("+x+","+y+");</script>");
, weil das das ToString() -Methode von x und y bezeichnet, die „System.Int32 []“, gibt und offensichtlich kann Javascript nicht verwenden, dass . Ich musste die Arrays als Strings übergeben, wie "[1,2,3,4,5]", also schrieb ich eine Hilfsmethode für die Konvertierung.
Auch gibt es einen Unterschied zwischen this.Page.ClientScript.RegisterStartupScript() und this.Page.ClientScript.RegisterClientScriptBlock() - der ehemalige legt das Skript am unteren Rand der Seite, die ich brauche, um zu sein Zugriff auf die Steuerelemente (wie bei document.getElementByID). RegisterClientScriptBlock() wird ausgeführt, bevor die Tags gerendert werden. Daher erhalte ich tatsächlich einen Javascript-Fehler, 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 komplette Beispiel kam ich mit:
// 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>
Diese Frage ist ähnlich, aber nicht ganz dasselbe. In meiner Frage bin ich genauer darüber, wie man Argumente an die JavaScript-Funktion weitergibt und Beispielcode liefert. Ich interessiere mich für die spezifischen Mechanismen davon. –