Ho un problema in cui una proprietà del mio modello non viene aggiornata correttamente quando viene inviata al mio controller per una chiamata di aggiornamento o di creazione da una griglia di Kendo. Il modello si presenta così:Modello Kendo Grid con una proprietà IEnumerable che non si aggiorna correttamente dopo la creazione/aggiornamento quando si utilizza il legame 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; }
}
Ecco la griglia a mio avviso:
@(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"))
)
)
Quindi più specificamente, il problema che sto avendo è che nella mia azione di controllo:
public async Task<ActionResult> EditNote(ReleaseNotesModel model)
model.ReleaseNoteTranslations
contiene sempre due oggetti vuoti (le proprietà sono nulle o 0), ovvero il valore predefinito che ho impostato per questa proprietà. Se non imposto alcun valore predefinito, non avrò alcun campo da modificare per questa proprietà nell'editor popup. Tutte le altre proprietà vengono aggiornate come previsto.
Ciò che mi infastidisce è che se utilizzo il binding del server anziché AJAX, tutti i dati vengono ricevuti correttamente. Così ho deciso di controllare i dati nelle intestazioni di richiesta di essere inviato in entrambi i casi:
// 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
Ora quello che ho notato prima qui è la sintassi di objectName[index].PropertyName
vs objectName[index][PropertyName]
Mi chiedo se questo potrebbe essere la causa del mio problema, e se è così, c'è un modo per me di andare direttamente a manipolare i dati inviati per risolverlo? Potrebbe essere un bug nel modo in cui Kendo Grid invia i dati tramite l'associazione Ajax?
In entrambi i casi, qualsiasi aiuto sarebbe molto apprezzato!
Sei stato in grado di creare un'altra griglia all'interno l'editor popup? e salva tutti i 'TranslationModel' insieme a' ReleaseNotesModel' in una volta? Sto avendo problemi a farlo. – Akbari
In realtà ho visualizzato solo un elenco di elementi textarea nell'editor popup, non ho mai provato a farlo con una griglia. – Alejo