У меня есть таблица HTML, к которой я добавляю элементы из javascript при обратном вызове ASP.NET при нажатии кнопки.
HTML:
<%@ Page Language="C#" CodeFile="Hello5.aspx.cs" Inherits="ClientCallback" %>
<html>
<head>
<script>
function AddResult()
{
GetResults("blah", "");
}
function UpdateTable(itemText)
{
var mytable = document.getElementById("mytable");
var rowID = mytable.rows.length;
var newrow = mytable.insertRow(rowID);
newrow.insertCell(0).appendChild(document.createTextNode(rowID));
newrow.insertCell(1).appendChild(document.createTextNode(itemText));
}
</script>
</head>
<body>
<form id="form1" runat="server" />
<input type="button" onclick="AddResult()" value="Add Result" />
<table border="1" id="mytable">
<th colspan="2">Results</th>
</table>
</body>
</html>
Codebehind:
public partial class ClientCallback : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
string _inputVal;
protected void Page_Load(object sender, EventArgs e)
{
string cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "UpdateTable", "context");
string callbackScript = "function GetResults(arg, context)" + "{ " + cbReference + "} ;";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "GetResults", callbackScript, true);
}
void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
_inputVal = eventArgument;
}
string ICallbackEventHandler.GetCallbackResult()
{
return _inputVal + " " + DateTime.Now.ToString();
}
}
Эта система обратного вызова работает нормально, но это не совсем то, что я хотел.
У меня есть функция C # для вычисления набора результатов на основе заданного числа ввода. Это может занять много времени, поэтому я хочу запустить его в потоке и обновлять таблицу при получении нового результата.
Но я не могу понять, как вызвать javascript из моего потока C # ... есть идеи?