2011-07-31 5 views
2

.Net의 Ajax.BeginForm을 사용하여 양식을 제출하고 개체 목록을 얻으려고합니다.JsonResult를 반환하는 MVC Ajax.BeginForm이 클라이언트에서 성공하지 못합니다.

@using (Ajax.BeginForm("ValidateEmployee", new AjaxOptions { OnBegin = "onBegin", OnSuccess = "onSucess", UpdateTargetId = "results"}) 

문제는 내 컨트롤러가 JsonResult을 반환하고 내가 JSON으로 내 반환 목록을 변환 할 때 onsuccess는 콜백이 호출되지 않습니다 및 ID가 "결과"내 사업부가 업데이트되지 않습니다이다. 그러나 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가 호출되지 않는 이유는 무엇입니까?

MVC 3을 사용하고 있으며 jquery.unobtrusive-ajax.js를 참조하고 있습니다.

도움 주셔서 감사합니다.

+0

점이 부족하다고 생각합니다. @using (Ajax.BeginForm ("ValidateEmployee", 새로운 AjaxOptions {OnBegin = "onBegin", onSuccess = "onSucess", UpdateTargetId = "results"} – ysrb

+0

그리고 OnSuccess (자본 O)이어야합니다 – ysrb

+0

감사합니다. – nthpixel

답변

8

동작 결과로 JsonResult을 사용하고 있기 때문에 을 UpdateTargetId과 함께 사용할 수 있다고는 생각하지 않습니다. Ajax.BeginForm 인 경우, UpdateTargetId을 지정하면 지정한 요소에 결과 개체가 추가됩니다. 반환하는 것은 Json 객체이기 때문에 오류가 발생합니다.

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] 

는 onSuccess 해고되고 당신이 볼 수 제거 UpdateTargetId되면 : 오류는 무언가 같이 될 것입니다.

function onSuccess(data){ 
//data is the json object 
// do your html manipulation here 
} 
+1

정확하게 맞습니다. 'UpdateTargetId'를 제거했습니다. 감사합니다. 귀하의 답변에 투표 하겠지만, 평판은 필요하지 않습니다. :( – nthpixel

관련 문제