Tôi gặp sự cố trong đó thuộc tính của mô hình không được cập nhật chính xác khi gửi đến bộ điều khiển của tôi từ lưới Kendo. Mô hình này trông như thế này:Mô hình Lưới Kendo với thuộc tính IEnumerable không cập nhật chính xác sau khi Tạo/Cập nhật khi sử dụng liên kết 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; }
}
Đây là lưới trong quan điểm của tôi:
@(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"))
)
)
Vì vậy, cụ thể hơn, vấn đề tôi đang gặp là trong hành động điều khiển của tôi:
public async Task<ActionResult> EditNote(ReleaseNotesModel model)
model.ReleaseNoteTranslations
luôn chứa hai đối tượng trống (thuộc tính là null hoặc 0), tức là giá trị mặc định mà tôi đặt cho thuộc tính này. Nếu tôi không đặt giá trị mặc định, thì tôi sẽ không có bất kỳ trường nào để chỉnh sửa cho thuộc tính này trong trình chỉnh sửa cửa sổ bật lên. Tất cả các thuộc tính khác được cập nhật như mong đợi.
Lỗi của tôi là nếu tôi sử dụng ràng buộc máy chủ thay vì AJAX, thì tất cả dữ liệu được nhận chính xác. Vì vậy, tôi đã quyết định để kiểm tra các dữ liệu trong tiêu đề yêu cầu được gửi trong cả hai trường hợp:
// 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
Bây giờ những gì tôi nhận thấy đầu tiên ở đây là cú pháp của objectName[index].PropertyName
vs objectName[index][PropertyName]
Tôi tự hỏi nếu điều này có thể là nguyên nhân gây ra vấn đề của tôi, và nếu vậy, có cách nào để tôi đi và trực tiếp thao tác dữ liệu được gửi để sửa chữa nó không? Đây có phải là một lỗi trong cách Kendo Grid gửi dữ liệu thông qua Ajax ràng buộc?
Dù bằng cách nào, bất kỳ trợ giúp nào cũng sẽ được đánh giá cao!
Bạn có thể tạo một lưới khác bên trong trình chỉnh sửa bật lên? và lưu tất cả 'TranslationModel' cùng với' ReleaseNotesModel' cùng một lúc? Tôi đang gặp vấn đề để làm như vậy. – Akbari
Thực ra tôi chỉ hiển thị danh sách các phần tử văn bản trong trình chỉnh sửa cửa sổ bật lên, tôi chưa bao giờ thử làm việc đó với lưới. – Alejo