0
我想從控制器更新textarea後,我發現了一些結果和頁面不應該重新加載。有沒有解決方案?從控制器更新Textarea
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public JsonResult SolveProblems(Problem[] array){
Solution sol=new Solution(array);
sol.OnSolutionFound+=sol_OnSolutionFound;
sol.OnTaskComplete+=sol_OnTaskComplete;
sol.Start();
return Json("Process started");
}
private void sol_OnSolutionFound(object sender, SolutionFoundEventArgs e)
{
// Here i want update textarea
}
private void sol_OnTaskComplete(object sender, SolutionCompletedEventArgs e)
{
// Here i want show process is finished
}
}
這是我的HTML頁面。其中包含了一些代碼和一個textarea的
..... some code....
<textarea class="form-control" id="ResultDisplay"></textarea>
<button type="button" id="btnSolve" class="btn btn-primary">Solve</button>
這是我的JavaScript文件
function GetProblems(){
...code...
return array;
}
$("#btnSolve").click(function() {
$.ajax({
type: "POST",
url: "/Home/SolveProblems",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(GetProblems()),
dataType: "json",
success: function (response) {
},
error: function (response) {
alert("Unexpected error occurs!")
}
});
});
裏面你'success'寫類似'$(「#ResultDisplay」)。VAL(響應)' –
@CarstenLøvboAndersenSolveProblems被主線程和啓動下運行將在另一個線程運行,因此主線程剛開始啓動方法,之後它需要時間來找到一個單一的解決方案,所以$(「#ResultDisplay」)。val(響應)不是解決方案 – Blue
不,不是你正在編碼的方式。您需要考慮MVC應用程序的請求 - 響應。你提出請求,你會得到迴應。您試圖:請求啓動backgroundprocess - 獲取請求的響應 - *然後*獲取backgroundprocess響應。沒有任何匹配backgroundprocess響應的請求,所以無處可去。你有(至少)兩種選擇:最簡單的方法是通過ajax發出第二個請求來完成後臺任務 - 不再需要後臺任務,因爲它將在第二個請求下運行。另一種選擇是重構使用SignalR。 –