Я хочу использовать DataTables Editor, но хочу получить полный контроль над публикацией, а не позволять Editor-Server обрабатывать ее. Есть ли способ сделать это? Я могу указать URL-адрес в Ajax на стороне клиента, и он отправляет обратно в контроллер, единственная проблема в том, что я не могу понять, как получить данные из вызова. Это часть Ajax:
$(document).ready(function () {
editor = new $.fn.dataTable.Editor({
ajax: ({
url: "/../AnyController/Update",
dataType: "json",
contentType: "application/json",
type: 'POST'
}),
formOptions: {
inline: {
onBlur: true,
submit: 'all'
}
},
table: "#timetracker",
fields: [
{
label: "Date1:",
name: "Date1"
},
{
label: "Comment 1:",
name: "Comment1",
type: "textarea"
}
]
});
А это метод Контоллера:
[HttpPost]
public JsonResult Update(EditorReturnData wtd)
{
return Json(wtd);
}
Я пробовал использовать множество других сигнатур методов, но значение wtd всегда равно нулю. У меня нет проблем с загрузкой таблицы, просто передавая данные Json, но как перенять процесс обновления из редактора таблиц данных я ускользаю.
У меня одно обновление. Я не мог понять, как Get, Post и Put могут использовать один и тот же метод контроллера, и этот метод не принимает параметров даже для Post и Put. Наконец я понял, что редактор передает данные в заголовке, и к ним можно получить доступ с помощью Request.Body. Оттуда это должна быть dll Datatables, которая выполняет фактические обновления.





enter code here Я обнаружил, что лучший способ сделать это - отправить обратно из ajax в другой контроллер для Post и Put, и вы можете получить доступ к возвращаемым данным из тела HttpRequest следующим образом.
public ActionResult Rest(HttpRequest request)
{
var stream = request.Body;
string url = new StreamReader(stream).ReadToEnd();
string newUrl;
while ((newUrl = Uri.UnescapeDataString(url)) != url)
url = newUrl;
Я добавил этот код в RestController из примера Datatables Dot Net Core Demo Rest, который можно загрузить с https://editor.datatables.net/
Ajax выглядит так
editor = new $.fn.dataTable.Editor( {
ajax: {
create: {
type: 'POST',
url: '/api/rest/create'
},
edit: {
type: 'PUT',
url: '/api/rest/edit'
},
remove: {
type: 'DELETE',
url: '/api/rest/remove'
}
},
Для полноты возвращаемые данные выглядят следующим образом: action = edit & data [row_43] [first_name] = Bruno & data [row_43] [last _name] = Nash & data [row _43] [position] = Softw are + Engineer & data [ro w_43 ] [office] = London & data [row_43] [extn] = 6222 & data [row_43] [st art_date] = 2011-05-03 & data [row_43] [salary] = 163500