私はかなり単純なコントローラーを持っています:
public class HomeController : Controller
{
public ActionResult Index()
{
Session["SomeData"] = "123";
return View();
}
[HttpPost]
public ActionResult LongTest()
{
Thread.Sleep(5000);
return Json(new { Text = DateTime.Now.ToString("hh:mm:ss.fff") + " - LongTest"});
}
[HttpPost]
public ActionResult CantAnswer()
{
return Json(new { Text = DateTime.Now.ToString("hh:mm:ss.fff") + " - CantAnswer"});
}
}
これらのメソッドをクライアント側から次のように使用します。
<script type="text/javascript">
$(document).ready(function () {
$('#btnLongOperation').click(function () {
$.post("/Home/LongTest", null, function (data) {
$('#result').text(data.Text);
}, "json");
});
$('#btnWnotWork').click(function () {
$.post("/Home/CantAnswer", null, function (data) {
$('#result').text(data.Text);
}, "json");
});
});
</script>
<div>
<input id="btnLongOperation" type="button" value="Long operation"/>
<input id="btnWnotWork" type="button" value="Won't work"/>
</div>
<div id="result">
最初のボタンをクリックしてから 5 秒待たずに 2 番目のボタンをクリックすると、2 番目のアクションは呼び出されません。Init メソッドで session を使用して文字列を削除すると、アクションを互いに待たずに呼び出すことができることがわかります。ただし、セッション オブジェクトを使用すると、最初のアクションが終了するまで、2 番目のアクションの結果は表示されません。asp.net mvcのこの動作を説明できる人はいますか?