2012-03-07 2 views
1

보시다시피, 나는이 물건에 아주 새롭다.MVC3의 jqGrid에서 컨트롤러로의 데이터?

로드가 잘되어있는 jqGrid를 설정했습니다. 인라인 편집을 사용하려고하고 있는데 설정 방법을 잘 모릅니다. 내 수신 방법이라고,하지만 난에 데이터를 얻을 해달라고한다

그리드 설정 :. 호출되는 컨트롤러에

$(function() { 
    var lastsel; 
    $("#list").jqGrid({ 
     url: '@Url.Action("ExampleData", "Home")', 
     datatype: 'json', 
     mtype: 'GET', 
     colNames: ['Namn', 'Adress', 'Stad'], 
     colModel: [ 
      { name: 'Name', index: 'Name', width: 130, editable: true }, 
      { name: 'Address', index: 'Address', width: 180, editable: true }, 
      { name: 'City', index: 'City', width: 80, editabel: true }, 
     ], 
     pager: '#pager', 
     rowNum: 10, 
     rowList: [10, 20, 30], 
     sortname: 'Name', 
     sortorder: 'desc', 
     viewrecords: true, 
     gridview: true, 
     width: 700, 
     onSelectRow: function (id) { 
      if (id && id !== lastsel) { 
       jQuery('#list').jqGrid('restoreRow', lastsel); 
       jQuery('#list').jqGrid('editRow', id, true); 
       lastsel = id; 
      } 
     }, 
     editurl: '@Url.Action("Incoming", "Home")', 
     caption: 'Kontaktpersoner' 
    }); 

    jQuery("#list").jqGrid('navGrid',"#prowed3",{edit:false,add:false,del:false}); 

그리고 코드입니다. 나는 그것이 장전 할 때 물건처럼 그것으로 보내

public ActionResult Incoming(Object stuff) 
    { 
     return null; 
    } 

내가 다시 서버로 JSON을 얻을 Should'nt ... 즉 다시 데이터를 얻기 위해 사용되어야 editurl 겠지?

답변

0

컨트롤러 동작 Incoming은 편집에만 사용하고 새 데이터를 추가하지 않기 때문에 데이터을 jqGrid로 되돌릴 필요가 없습니다. 오류가 발생하는 경우 오류에 해당하는 HTTP 상태 코드가 반환되는 것이 중요합니다. 이 경우 jqGrid는 이전 결과를 복원 할 수 있습니다.

성공적으로 편집 한 경우 서버에서 데이터를 반환해야하는 경우가 있습니다. 예를 들어 필자는 낙관적 동시성을 관리하기 위해 데이터베이스의 모든 테이블에 보통 null이 아닌 rowversion (이전 timestamp) 열을 만듭니다. 열의 값은 테이블의 INSERT에 자동으로 작성되며 데이터 항목의 UPDATE시 자동으로 업데이트됩니다. 그래서 jqGrid에 다른 숨겨진 열을 추가합니다.이 열은 다른 데이터와 함께 데이터베이스에서 가져옵니다. 행을 편집 할 때 rowversion의 이전 값이 데이터가 다른 위치에서 변경되었는지 확인하는 데 사용됩니다. 어떤 방법 으로든 행 편집 후에 rowversion의 새 버전을 jqGrid로 보내야합니다. aftersavefunc을 사용하여 서버 응답을 읽고 jqGrid에 저장된 rowversion의 값을 업데이트 할 수 있습니다.

위의 설명은 가능한 구현의 대략적인 스키마 일뿐입니다. 귀하의 주된 질문에 대한 대답은 : Incoming 조치에서 아무것도 반환 할 필요가 없다는 것입니다. jqGrid에 약간의 정보를 보내야한다면 aftersavefunc 매개 변수 editRow을 사용하여 서버 응답을 얻고 처리 할 수 ​​있습니다.

+0

매우 유용한 답변을 보내 주셔서 감사합니다. 그러나 질문은 컨트롤러에서 컨트롤러 (여기에서 Stuff 매개 변수가있는 위치)에있는 항목을 브라우저에서 가져 오는 방법이었습니다. 나중에 그리드에서와 같은 이름의 매개 변수를 추가하면 컨트롤러 메서드에 자동으로 추가된다는 사실을 발견했습니다. 나는 json을받을 것이라고 생각했다! – kaze

+1

'Name','Address','City' 그리고 아마'id'와 같은 다른 속성을 가진 클래스를 가질 것입니다. 'Object stuff' 대신에'MyClass stuff'을 사용하면'stuff'의 속성이 채워집니다. 'id' 속성이 없다면'public ActionResult Incoming (Object stuff)'을'public ActionResult Incoming (string id, MyClass stuff)'으로 변경할 수 있습니다. 그것이 필요한 것입니까? – Oleg

+0

고마워요! 그게 정확히 무슨 뜻이야, 지금은 별도의 문자열 대신 내 ViewModel에서 데이터를 얻을 수 있습니다! – kaze