Một số thứ khác tôi đã phát hiện ra:
Bạn không thể vượt qua trực tiếp trong một mảng như:
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "xx",
"<script>test("+x+","+y+");</script>");
vì đó gọi ToString() phương pháp của x và y, trong đó trả "System.Int32 []", và rõ ràng Javascript không thể sử dụng . Tôi đã phải vượt qua trong mảng như chuỗi, như "[1,2,3,4,5]", vì vậy tôi đã viết một phương pháp trợ giúp để làm việc chuyển đổi.
Ngoài ra, có một sự khác biệt giữa this.Page.ClientScript.RegisterStartupScript() và this.Page.ClientScript.RegisterClientScriptBlock() - trước đây đặt kịch bản ở cuối trang, mà tôi cần để trở thành có thể truy cập các điều khiển (như với document.getElementByID). RegisterClientScriptBlock() được thực hiện trước khi các thẻ được hiển thị, vì vậy tôi thực sự gặp phải lỗi Javascript nếu tôi sử dụng phương thức đó.
http://www.wrox.com/WileyCDA/Section/Manipulating-ASP-NET-Pages-and-Server-Controls-with-JavaScript.id-310803.html bao gồm sự khác biệt giữa hai loại khá tốt.
Dưới đây là ví dụ hoàn chỉnh tôi đã đưa ra:
// 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>
Câu hỏi này tương tự, nhưng không hoàn toàn giống nhau. Trong câu hỏi của tôi, tôi đang cụ thể hơn về cách chuyển đối số cho hàm javascript và cung cấp mã ví dụ. Tôi quan tâm đến cơ chế cụ thể của nó. –