Kendo-Grid-Modell mit einem IEnumerable-Eigenschaft nicht richtig aktualisiert-nach dem Erstellen/Aktualisieren bei der Verwendung von AJAX-Bindung

Ich habe da ein problem, wo eine Eigenschaft von mein Modell wird nicht korrekt aktualisiert, wenn Sie senden Sie es an meinem controller, für einen Update-oder Create-Aufruf von einem Kendo-Raster. Das Modell sieht wie folgt aus:

public class ReleaseNotesModel
{
    public int NoteID { get; set; }
    public int ReleaseID { get; set; }
    public List<TranslationModel> ReleaseNoteTranslations { get; set; }
    public ReleaseNoteType ItemType { get; set; }
}
public class TranslationModel
{
    public int TranslationID { get; set; }
    public string Translation { get; set; }
    public int LanguageID { get; set; }
    public int ItemID { get; set; }
}

Hier ist das raster, in meiner Ansicht:

@(Html.Kendo().Grid<ReleaseNotesModel>()
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Bound(m => m.ItemType).Width(140);
        columns.Bound(m => m.Description);
        columns.Command(command =>
            {
                command.Edit();
                command.Destroy();
            }).Width(170);
    })
    .ToolBar(toolbar => toolbar.Create())
    .Editable(editable => editable
        .Mode(GridEditMode.PopUp)
        .TemplateName("ReleaseNoteTemplate")
        .Window(w => w.Width(620))
        .DisplayDeleteConfirmation(true)
    )
    .Pageable()
    .Sortable()
    .Scrollable()
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .ServerOperation(false)
        //.Server()
        .Events(e => e.Error("grid_error"))
        .Model(model =>
        {
            model.Id(m => m.NoteID);
            model.Field(m => m.ReleaseID).DefaultValue(Model.ReleaseID);
            model.Field(m => m.ItemType).DefaultValue(ReleaseNoteType.NewFeature);
            //defaultTranslationsList is a List<TranslationModel> with two empty objects in it
            model.Field(m => m.ReleaseNoteTranslations).DefaultValue(defaultTranslationsList);
        })
        .PageSize(5)
        .Read(read => read.Action("GetNotes", "ReleaseNotes", new { releaseID = Model.ReleaseID }))
        .Create(create => create.Action("AddNote", "ReleaseNotes"))
        .Update(update => update.Action("EditNote", "ReleaseNotes"))
        .Destroy(destroy => destroy.Action("DeleteNote", "ReleaseNotes"))
    )
)

Also konkret ist das problem, das ich habe ist, dass in meine controller-action:

public async Task<ActionResult> EditNote(ReleaseNotesModel model)

model.ReleaseNoteTranslations enthält immer zwei leere Objekte (Eigenschaften null sind oder 0), D. H. der default-Wert, die ich für diese Eigenschaft. Wenn ich keinen default-Wert, dann will ich Sie nicht alle Felder Bearbeiten, die für diese Eigenschaft in der popup-editor. Alle anderen Eigenschaften sind wie erwartet aktualisiert.

Was mich nervt ist, dass wenn ich mit server-Bindung anstelle von AJAX, dann alle Daten korrekt empfangen werden. Also beschloss ich, check out die Daten in den request-Header gesendet wird, in beiden Fällen:

//Using server binding
ReleaseID:300
NoteID:886
ItemType:1
ReleaseNoteTranslations[0].ItemID:886
ReleaseNoteTranslations[0].LanguageID:1
ReleaseNoteTranslations[0].TranslationID:869
ReleaseNoteTranslations[0].Translation:The module is now released!
ReleaseNoteTranslations[1].ItemID:886
ReleaseNoteTranslations[1].LanguageID:2
ReleaseNoteTranslations[1].TranslationID:870
ReleaseNoteTranslations[1].Translation:Le module est maintenant disponible!
NoteID:886

//Using AJAX binding
sort:
group:
filter:
NoteID:886
ReleaseID:300
ReleaseNoteTranslations[0][TranslationID]:869
ReleaseNoteTranslations[0][Translation]:The module is now released!
ReleaseNoteTranslations[0][LanguageID]:1
ReleaseNoteTranslations[0][ItemID]:886
ReleaseNoteTranslations[1][TranslationID]:870
ReleaseNoteTranslations[1][Translation]:Le module est maintenant disponible!
ReleaseNoteTranslations[1][LanguageID]:2
ReleaseNoteTranslations[1][ItemID]:886
ItemType:1

Nun, was ich merke, die erste ist hier die syntax von objectName[index].PropertyName vs objectName[index][PropertyName]

Ich Frage mich, ob dies könnte die Ursache für mein problem, und wenn ja, gibt es eine Möglichkeit für mich zu gehen, und direkt die Daten Bearbeiten, die gesendet wird, um es zu beheben? Könnte das ein bug in den Weg, Kendo-Netz sendet Daten über Ajax verbindlich?

Entweder Weg, jede Hilfe wäre sehr geschätzt werden!

  • Sie habe in der Lage zu schaffen, ein anderes raster innerhalb der popup-editor? und speichern Sie alle die TranslationModel zusammen mit der ReleaseNotesModel auf einmal? Ich bin mit problem zu tun.
  • Eigentlich habe ich nur angezeigt, eine Liste von textarea-Elemente in den popup-editor, ich habe nie versucht, es zu tun mit einem Gitter.
InformationsquelleAutor Alejo | 2013-07-05
Schreibe einen Kommentar