.NetのAjax.BeginFormを使用してフォームを送信し、オブジェクトのリストを取得しようとしています。
@using (Ajax.BeginForm("ValidateEmployee", new AjaxOptions { OnBegin = "onBegin", OnSuccess = "onSucess", UpdateTargetId = "results"} )
問題は、コントローラーがJsonResultを返し、返されたリストをjsonに変換すると、OnSuccessコールバックが呼び出されず、IDが「results」のdivが更新されないことです。ただし、onBeginコールバックが呼び出されます。コントローラはこんな感じ。
public JsonResult ValidateEmployee(Employee emp)
{
...
List<Role> roles = new Role();
foreach(var x in myCollection)
{
roles.Add(new Role { ID = x.ID, Name = x.Name });
}
return Json(roles);
}
Json(roles)
リストが有効なjsonに正しく変換されることを確認しました。しかし、onSuccessが実行されないため、使用できません。
不思議なことに、リストをjsonに変換せずに、それを.Netリストとして返すだけの場合、両方のコールバックがヒットし、出力System.Collections.Generic.List'1[Models.Role]を更新する要素がヒットします。したがって、jsonではなく、データを使用する方法がありません。
では、コントローラーからjsonオブジェクトを返すときにonSuccessが呼び出されないのはなぜですか?
私はMVC3を使用しており、jquery.unobtrusive-ajax.jsを参照しています。
助けてくれてありがとう。