2016-03-29 2 views
0

У меня есть сайт Asp.Net MVC, для которого я начал использовать kogrid knockoutjs для отображения сеток данных.KO Grid не может сохранить данные из отредактированной ячейки - с помощью Plunker

Для одной конкретной сетки я хотел бы, чтобы пользователь мог редактировать столбцы адреса электронной почты. При нажатии кнопки сохранения редактируемое значение сохраняется в базе данных.

Я могу представить сетку в порядке и выбрать строку, которую пользователь может ввести в нужную ячейку. Моя проблема в том, что я не понял, как изменить значение ячейки .

Вот определение для моих вариантов сетки:

var emailCellTemplate = '<div><input type=\"text\" data-bind=\"visible: $parent.selected(), value: $parent.entity[$data.field]" /><span data-bind=\"visible: !$parent.selected(), text: $parent.entity[$data.field]\"></span></div>' 
this.gridOptions = { 
    height: 200, 
    afterSelectionChange: function() { return true; }, 
    data: self.workflowRules, 
    enablePaging: true, 
    pagingOptions: self.pagingOptions, 
    filterOptions: self.filterOptions, 
    selectWithCheckboxOnly: true, 
    selectedItems: self.selected, 
    canSelectRows: true, 
    displaySelectionCheckbox: true, 
    columnDefs: [{ field: 'ReceivePortName', displayName: 'Receive Port', width: 130 }, 
       { field: 'MessageType', displayName: 'Message Type', width: 400 }, 
       { field: 'TriggerSource', displayName: 'Source', width: 150 }, 
       { field: 'TargetEmailAddress', displayName: 'Email', width: 180, cellTemplate: emailCellTemplate }, 
       { field: 'AssignedToName', displayName: 'Assigned To', width: 140 }, 
    ] 
}; 

$ parent.entity [$ data.field] отлично подходит для выбора значения, которая была загружена из базы данных, но не дает мне отредактированное значение. Когда я помещаю точку останова в код js, который запускается при нажатии кнопки Save to Database, я получаю, чтобы увидеть отредактированное значение в WorkflowRules.TargetEmailAddress, но я не понял, как привязать его.

Я создал шлепнуть, чтобы помочь проиллюстрировать здесь: https://plnkr.co/edit/Ibc0WZwyb4melgNDzcUo

Может кто-нибудь, пожалуйста, посоветуйте, как мне нужно установить мой emailCellTemplate?

+0

Как вы хотите использовать измененные данные? Вы можете найти его в 'vm.workflowRules()' –

+0

В вашем примере ссылки есть ошибка 'vm не определена' –

ответ

0

Спасибо за комментарии, теперь я отследил причину ошибки.

Проблема была в моей savetoDatabase функция моего javascript-контроллера. Контроллер сделал определить observeable this.workflowRules = ko.observableArray(vm.WorkflowRules);, но в пределах функций saveToDatabase он использовал модель представления сервера при преобразовании в JSON перед вызовом контроллера сервера var jsSaveModel = ko.toJS(vm);

Для того, чтобы исправить это, я добавил дополнительную строку, чтобы обновить WorkflowRules массива виртуальной машины с содержанием наблюдаемого перед преобразованием в формат JSON, так что теперь у меня есть

vm.WorkflowRules = this.workflowRules(); 
var jsSaveModel = ko.toJS(vm); 
Смежные вопросы