2012-12-10 6 views
1

모달 팝업에서 표시 할 부분보기 (양식)가 있습니다. 제출시 데이터베이스에 새 항목이 작성됩니다. 이것은 ajax 호출을 통해 수행되어야합니다. ajax 호출에서 모든 양식 필드를 전달하려면 어떻게합니까? 나는 MVC4를 사용하고있다.아약스를 통해 부분보기 제출

$ ('form'). serialize()를 시도했지만 잘못된 JSON 프리미티브가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

var dataToSend = $('form').serialize(); 
    $.ajax({ 
     url: urlForSaving, 
     data: dataToSend, 
     cache: false, 
     type: 'POST', 
     dataType: 'json', 
     contentType: "application/json;charset=utf-8", 
     success: function (data, status) { 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { alert('error') } 
    }); 

컨트롤러

[HttpPost] 
    public JsonResult Add(SomeModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      RedirectToAction("Index"); 
     } 

     return Json(new { 
     Success = false, 
     Message = "Validation Errors" 
     }); 
    } 

답변

1

당신은 다음과 같이 객체에 필드 값을 추가 한 다음 필요한 경우에 호출되는 함수에 그 개체를 전달해야한다.

MVC3에서
var dataToSend = { 
        fieldname: $("FIELDCLASS OR ID").val(); 
        }; 

    function tocall(){ 
     $.ajax({ 
       url: urlForSaving, 
       data: JSON.stringify(obj:dataToSend), 
       cache: false, 
       type: 'POST', 
       dataType: 'json', 
       contentType: "application/json;charset=utf-8", 
       success: function (data, status) { 
      }, 
       error: function (xhr, ajaxOptions, thrownError) { alert('error') } 
      }); 
        }; 
+0

나는 이것이 가능하다는 것을 알고있다. 그러나 이것은 더 깨끗한 접근법이 아닙니다. 나중에 양식에 필드를 하나 더 추가하면 아약스 호출도 변경해야합니다. 이것이 유일한 접근 방법인지 또는 더 나은 방법이 있는지 알고 싶습니다. – annantDev

+0

@annantDev : 이것은 최선의 방법이며, 만약 당신이 정말로 뭔가 다른 것을 찾고 있다면, "FormCollection"을 사용하여 그것을 할 수 있습니다. 단지 그것을 내 보내세요. 그러나 당신은 당신의 아약스 기능을 떨어 뜨려야 할 것입니다. 도움이 ... –

1

및 최대 나는 (Http.BeginForm에 나란히 놓이는로) 부분보기 Ajax.BeginForm를 사용하는 이상적인 상황 같아요. Ajax 버전은 ajax를 통해 양식 게시를 포함하여 모든 것을 자동으로 연결합니다.

MSDN Ajax.BeginForm

관련 문제