2016-11-26 2 views
0

Jqgrid 인라인 편집은 JSON 데이터를 보냅니다. 그러나 인라인 삭제는 FORMs data 을 보냅니다. 확인 상자가 서버를 묻는 팝업 때문에 내가 그리드에서 삭제 버튼을 삽입하는 방법을 heres JSON 데이터 만JqGrid에서 삭제하는 동안 JSON 데이터를 보내려면 어떻게해야합니까?

를 사용하여 웹 메소드에 데이터를 보낼 필요가

colmodelMob 내 colModel 배열 기본적으로

colmodelMob.push(
       { 
        label: "Edit Actions", 
        name: "actions", 
        width: 100, 
        formatter: "actions", 
        formatoptions: { 
         keys: true, 
         editOptions: {}, 
         addOptions: {}, 
         delOptions: {} 
        }  
       }); 

그것입니다 행 삭제를위한 형태. 하지만 나는 내 데이터가 JSON으로 보내지는 것을 필요로하지 않는다. 그렇지 않다면 webmethod을 치지 않을 것이다.

+0

사용하는 jqGrid의 버전 및 사용 가능한 포크 ([free jqGrid] (https://github.com/free-jqgrid/jqGrid), 상용 [Guriddo jqGrid JS] (http://guriddo.net/?page_id=103334) 또는 버전 <= 4.7의 이전 jqGrid). – Oleg

+0

@Oleg 메신저는 이전 jqgrid 버전 4.4.4를 사용합니다. 그것의 무료 버전 (Trirand jqGrid) – user2838738

답변

0

jqGrid는 jQuery.ajax을 사용하여 서버와 통신합니다. JSON 형식으로 데이터를 보내려면 다음 두 가지 작업을 수행해야합니다.

  1. JSON 형식으로 데이터를 인코딩해야합니다. 일반적으로 인코딩에는 JSON.stringify이 사용됩니다.
  2. contentType 옵션을 "application/json" 또는 "application/json; charset=utf-8" 값으로 설정해야합니다. 요청에 HTTP 헤더 ContentType이 포함됩니다. 헤더는 서버에 전송 된 데이터가 JSON 형식으로 인코딩되었음을 서버에 알립니다.

임의로 dataType: "json" 옵션을 사용할 수도 있습니다. Ajax 호출에 대한 응답에도 JSON 인코딩 데이터가 포함되어야하는 경우 옵션을 사용합니다.

이제 위의 요구 사항을 jqGrid 내부에서 구현하는 방법에 대해 설명합니다. jqGrid는 많은 곳에서 jQuery.ajax를 사용할 수 있습니다. jqGrid의 레트로 버전 4.4.4를 사용합니다. 훨씬 적은 가능성을 가지고 있으며, 아주 오래된 웹 브라우저, 오래된 jQuery 등의 시대에 개발되었습니다. 나는 jqGrid 4.4.4의 발행일에 Chrome 24, Firefox 18, Internet Explorer 10, Safary 6.0.2 중 하나를 사용했음을 상기시킵니다. IE8 (및 인터넷 익스플로러)은 데스크톱에서 주로 사용되는 웹 브라우저 (Windows에서만)였습니다. 하나는 Chrome 54, Firefox 50, Microsoft Edge 38, Internet Explorer 11, Safari 10에서 작동합니다. jqGrid 4.4.4가 최신 웹 브라우저와 잘 작동 할 것이라고 정말로 생각하십니까? free jqGrid의 최신 버전 (4.13.5)으로 업데이트하는 것이 좋습니다. 당신은 여전히있는 jqGrid 4.4.4을 사용하는 경우

당신은

{ 
    label: "Edit Actions", 
    name: "actions", 
    width: 100, 
    formatter: "actions", 
    formatoptions: { 
     keys: true, 
     delOptions: { 
      serializeDelData: function (postData) { 
       return JSON.stringify(postData); 
      }, 
      ajaxDelOptions: { 
       contentType: "application/json" 
      } 
     } 
    } 
} 

하나는 사용하는 다른 방법에 의존했다 다양한 plases에 delGridRow의 옵션을 설정해야 사용해야합니다. 문제는 직접, 간접적으로 delGridRow 메서드를 사용하는 것입니다. 예를 들어 formatter: "actions", navGrid, inlineNav은 인라인 편집 또는 양식 편집 옵션을 사용합니다. 해당 깊이 배치 된 옵션을 사용하여 사용자 지정 옵션을 delGridRow으로 지정해야합니다. 무료 jqGrid에는 jqGrid 옵션이 있습니다.이 메소드를 사용하면 메소드 간접 호출에 공통 옵션을 지정할 수 있습니다. inlineEditing, formEditing, formDeleting, formViewing, searching을 사용하여 모든 방법에 사용 된 기본값 인 옵션을 지정할 수 있습니다. 따라서 당신은 당신이 단지 formatter: "actions"formatoptions 속성을 제거 할 수 있습니다 그 후

inlineEditing: { 
    keys: true 
}, 
formDeleting: { 
    serializeDelData: function (postData) { 
     return JSON.stringify(postData); 
    }, 
    ajaxDelOptions: { 
     contentType: "application/json" 
    } 
} 

있는 jqGrid 옵션을 사용할 수 있습니다.navGrid을 사용하는 경우에도 삭제하는 동안 동일한 옵션이 사용됩니다.

the wiki article에서 옵션을 지정하는 새로운 방법에 대해 자세히 읽을 수 있습니다.

그런데 인라인 편집에 문제가있을 수 있습니다. 인라인 편집 중에 JSON 인코딩을 사용하려면 ajaxRowOptions 옵션과 serializeRowData 콜백 jqGrid를 사용해야합니다. 무료 jqGrid는 동일한 옵션을 지원하며 내부에 ajaxSaveOptionsserializeSaveData을 추가로 사용할 수 있습니다.