2017-03-06 1 views
1

나는 devextreme 함께 DataGrid 사용하고 있습니다. 어떻게 asp.net mvc 컨트롤러에 DataGrid를 보낼 수 있습니까? 내가보기에이 시도 :데이터 그리드 devextreme 컨트롤러에 asp.net mvc 게시하는 방법

@using (Html.BeginForm("action-name", "controller-name", FormMethod.Post)) 
      { 
       <div id="frm"></div> 
       <div id="grid"></div> 
       <div class="submit-button" id="submitBtn"></div> 
      } 

을이 내 모델 : 내 콘트롤에

public class class-name 
    { 
     public int id { get; set; } 
     public string Name { get; set; } 
     public string FName { get; set; } 
     public ContactInfo ContactInfo { get; set; } 
    } 

public class ContactInfo 
    { 
     public string type { get; set; } 
     public string value { get; set; } 
    } 

난 내 폼 데이터 (클래스 이름)하지만 그리드 데이터 (CONTACTINFO)를 얻을 수있다 null

+0

그리드에서 편집 하시겠습니까? 데이터 그리드 옵션을 제공 할 수 있습니까? DevExtreme 버전은 무엇을 사용합니까? – Sergey

+0

16.2 버전을 사용하고 있습니다. 예, 나는 행을 추가, 업데이트 및 삭제합니다. 하지만 버튼을 클릭 할 때 컨트롤러의 배열에있는 DataGrid의 모든 데이터를 어떻게 보낼 수 있습니까? 제출 버튼을 클릭하면 양식 데이터가 컨트롤러로 전송됩니다. – leman17

답변

2

귀하의 경우에는 ASP.NET MVC Wrappers for DevExtreme을 사용할 수 있습니다.

@(Html.DevExtreme().DataGrid() 
    .DataSource(ds => ds 
     .WebApi() 
     .Controller("GridData") 
     .Key("OrderID") 
     .LoadAction("GetAllOrders") 
     .InsertAction("InsertOrder") 
     .UpdateAction("UpdateOrder") 
     .DeleteAction("RemoveOrder") 
    ) 
) 

그리고 컨트롤러 :이 경우 당신이이 같은 WebApi 컨트롤러에 그리드 바인딩 할 수

public class DataGridWebApiController : ApiController { 

    [HttpGet] 
    public HttpResponseMessage GetAllOrders(DataSourceLoadOptions loadOptions) { 
     //... 
    } 

    [HttpPost] 
    public HttpResponseMessage InsertOrder(FormDataCollection form) { 
     //... 
    } 

    [HttpPut] 
    public HttpResponseMessage UpdateOrder(FormDataCollection form) { 
     //... 
    } 

    [HttpDelete] 
    public void RemoveOrder(FormDataCollection form) { 
     //... 
    } 
} 

글쎄, 서버에 모든 데이터 그리드 데이터를 보낼 필요가 없습니다 측면. 업데이트 된 데이터 만 관리하면됩니다.

this article에는 데이터 바인딩에 대한 추가 정보가 있습니다.

this demo도 살펴보십시오.

+0

멋진데! 하지만 어떻게 제출 메뉴를 클릭하면 내 컨트롤러에 데이터 (내 양식과 그리드 데이터 모두)를 게시 할 수 있습니까? 내가 onclick 메서드 버튼을 사용하고 아약스를 사용하지만 성공하지 못했습니다. – leman17

+1

왜 모든 데이터 그리드를 서버 측에 게시 하시겠습니까? 그것은 약간 이상하게 들린다. 내장 된 dxDataGrid 기능을 사용하여 데이터 변경을 처리 할 수 ​​있습니다. 나는 CRUD 연산을위한 컨트롤러를 구현하고 DataGrid를 편집 할 수 있도록합니다. 위의 샘플과 같습니다. – Sergey

+0

leman17은 변경된 그리드 데이터를 폼의 다른 데이터와 함께 하나의 단일 폼으로 함께 저장하려고합니다. POST submit. 이 작업을 수행하는 방법을 궁금합니다. – Sven

-1

내 질문에 대한 내 길을 발견했다. 여기에 해결책이 있습니다. https://www.devexpress.com/Support/Center/Question/Details/T489645 덕분에 최선의 지원을 받았습니다.

+0

"이 티켓을 볼 수 없습니다. 티켓이면 로그인하십시오." 이 페이지 에서처럼 페이지에 액세스 할 수없는 경우 답안의 텍스트를 인용하고 특성을 지정하는 것이 좋습니다. –

2

모든 열에 대해 cellTemplate을 사용할 수 있으며 숨겨진 입력을 사용해야하는 cellTemplate에서 사용할 수 있습니다. 예를 들어 다음 코드를 가정합니다.

factory.Add().DataField("Mobile") 
      .CellTemplate(@<text> 
       <%= text %> 
       <input type='hidden' name='Addresses[<%= rowIndex %>].Mobile' value='<%= value %>' /> 
       </text>); 

텍스트, rowIndex, 값은 DevExtreme 개체입니다. 자세한 내용은 cellInfo 링크 섹션을 확인하십시오. https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid/Configuration/columns/?search=columns

+0

사이트 콘텐츠가 변경되거나 사용할 수 없게 될 경우를 대비하여 링크 주변에 컨텍스트를 추가하고 관련 파트를 복사하여 붙여 넣으십시오. – LW001

+0

여전히 유일한 해결책입니까? – Sven

+0

그리드에 페이지가 하나 있거나 서버 조작이 false 인 경우 @ 대신, getDataSource()를 대신 사용할 수 있습니다. 예를 들면 다음과 같습니다. var allGridData = $ ("# yourGridId") .dxDataGrid ('instance').getDataSource(); –

관련 문제