2017-03-06 2 views
1

ich habe DataGrid mit Devextreme. Wie kann ich Datagrid an den Controller in asp.net mvc senden? Ich habe versucht, dies aus meiner Sicht:Wie man Data Grid devextreme auf Controller in 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> 
      } 

und das ist mein Modell:

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; } 
    } 

in meinem contoller i meine Daten erhalten (Klassenname), aber die Rasterdaten (Contact) ist null

+0

Verwenden Sie die Bearbeitung in einem Raster? Können Sie Ihre Datenrasteroptionen bereitstellen? Und noch eine wichtige Sache, welche DevExtreme-Version verwenden Sie? – Sergey

+0

Ich benutze 16.2 Version. und ja, ich habe die Zeilen hinzufügen, aktualisieren und löschen. aber wie kann ich senden alle Daten in DataGrid in Array zu meinem Controller, wenn ich auf die Schaltfläche klicken, wie wenn ich Schaltfläche "Senden" klicken und die Formulardaten an meinen Controller senden. – leman17

Antwort

2

In Ihrem Fall können Sie ASP.NET MVC Wrappers for DevExtreme verwenden.

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

und die Steuerung: In diesem Fall wird ein Raster zu WebAPI Controller so zu binden, in die Lage

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) { 
     //... 
    } 
} 

Nun, ist es nicht notwendig, alle Datagrid Daten an einen Server zu senden Seite. Verwalten Sie nur die aktualisierten Daten.

Es gibt eine zusätzliche Information über eine Datenbindung in this article.

Schauen Sie sich auch this demo an.

+0

das ist großartig! Aber wie kann ich Daten (sowohl meine Form- als auch meine Rasterdaten) an meinen Controller senden, wenn ich auf "Senden" klicke. Ich habe versucht onclick method button und benutze Ajax darin, aber ich war nicht erfolgreich. – leman17

+1

Warum möchten Sie alle Datenraster an eine Serverseite senden? Es klingt ein bisschen komisch. Sie können Datenänderungen mithilfe der integrierten dxDataGrid-Funktionalität verarbeiten. Ich meine, implementieren Sie Controller für CRUD-Operationen und aktivieren Sie die Bearbeitung für DataGrid. Wie im obigen Beispiel. – Sergey

+0

leman17 möchte geänderte Rasterdaten zusammen mit anderen Daten auf seinem Formular zusammen in einem einzigen Formular speichern. Ich frage mich, wie ich diese Aufgabe erfüllen soll. – Sven

-1

für meine Frage habe ich meinen Weg gefunden. hier ist die Lösung. https://www.devexpress.com/Support/Center/Question/Details/T489645 dank devextreme Unterstützung.

+0

"Sie können dieses Ticket nicht anzeigen. Melden Sie sich an, wenn dies Ihr Ticket ist." Es ist besser, den Text in Ihrer Antwort zu zitieren und zu attributieren, falls die Seite unzugänglich wird. –

2

Sie können ein cellTemplate für jede Spalte verwenden und in cellTemplate müssen Sie versteckten Eingang verwenden. Nehmen Sie beispielsweise folgenden Code an:

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

Text, rowIndex, Wert ist DevExtreme-Objekt. für weitere Informationen überprüfen Sie bitte die CellInfo Abschnitt des Links. https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid/Configuration/columns/?search=columns

+0

Bitte fügen Sie einen Kontext um Links hinzu, kopieren Sie relevante Teile und fügen Sie sie für den Fall ein, dass sich der Inhalt der Website ändert oder nicht mehr verfügbar ist. – LW001

+0

Ist das immer noch die einzig gültige Lösung? – Sven

+0

@Sieben Wenn Ihr Raster eine Seite hat oder die Serveroperation falsch ist, können Sie stattdessen getDataSource() verwenden. Beispiel: var allGridData = $ ("# yourGridId"). dxDataGrid ('instance').getDataSource(); –