Mam problem z nieprawidłową aktualizacją właściwości mojego modelu podczas wysyłania do kontrolera w celu aktualizacji lub utworzenia połączenia z siatki Kendo. Model wygląda następująco:Model siatki Kendo z właściwością IEnumerable niepoprawną aktualizacją po utworzeniu/aktualizacji podczas używania wiązania AJAX
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; }
}
Oto siatki moim zdaniem:
@(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"))
)
)
Tak dokładniej, problem mam jest to, że w mojej działania kontrolera:
public async Task<ActionResult> EditNote(ReleaseNotesModel model)
model.ReleaseNoteTranslations
zawsze zawiera dwa puste obiekty (właściwości są zerowe lub 0), tj. Domyślną wartość ustawioną dla tej właściwości. Jeśli nie ustawię wartości domyślnej, nie będę miał żadnych pól do edycji dla tej właściwości w edytorze podręcznym. Wszystkie pozostałe właściwości są aktualizowane zgodnie z oczekiwaniami.
To, co robię, polega na tym, że jeśli używam wiązania serwera zamiast AJAX, wszystkie dane zostaną poprawnie odebrane. Więc postanowiłem sprawdzić dane w nagłówku żądania wysyłane w obu przypadkach:
// 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
Teraz co zauważam pierwsze tu jest składnia objectName[index].PropertyName
vs objectName[index][PropertyName]
Zastanawiam się, czy to może być przyczyną mojego problemu, a jeśli tak, czy istnieje sposób, aby przejść i bezpośrednio manipulować przesyłanymi danymi, aby je naprawić? Czy może to być błąd w sposobie, w jaki Kendo Grid wysyła dane przez wiązanie Ajax?
Tak czy inaczej, każda pomoc będzie bardzo cenna!
Byłaś w stanie stworzyć inną siatkę wewnątrz edytor podręczny? i zapisać wszystkie 'TranslationModel' razem z' ReleaseNotesModel' na raz? Mam problem, aby to zrobić. – Akbari
Właściwie wyświetlałem tylko listę elementów textarea w edytorze wyskakującym, nigdy nie próbowałem robić tego z siatką. – Alejo