2

.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を参照しています。

助けてくれてありがとう。

4

1 に答える 1

8

アクションの結果として使用Ajax.BeginFormUpdateTargetIdているので、シナリオに使用できるとは思いません。、givenは、指定した要素に結果のオブジェクトを追加しようとします。返されるのはJsonオブジェクトであるため、エラーがスローされます。エラーは次のようになります。JsonResultAjax.BeginFormUpdateTargetId

    uncaught exception: [Exception... "Could not convert JavaScript argument arg 0 
[nsIDOMDocumentFragment.appendChild]" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"
 location: "JS frame :: http://localhost:58248/Scripts/jquery-1.4.4.js :: <TOP_LEVEL> :: 
line 5167" data: no]

削除すると、 onSuccessUpdateTargetIdが起動されているのがわかります。

function onSuccess(data){
 //data is the json object
 // do your html manipulation here
}
于 2011-07-31T11:40:33.660 に答える