Я хочу передать много параметров из моей функции ajax в мой контроллер.Первоначально я думал, что просто сделаю это, используя строку запроса, но это не дало мне желаемого результата, хотя это работало, создавая непривлекательный URL, тем больше данных я добавил.
Я думал, что лучшеподход заключается в том, чтобы взять все эти данные, которые мне нужно передать, сохранить их как объект и передать эту полезную нагрузку в контроллер из функции ajax.
Функция ajax запускается из атрибута .event()
KendoGrid
.
Kendo Grid
@(Html.Kendo().Grid<MyProject.Models.Car>()
.Name("requirement-grid")
.Columns(columns =>
{
columns.Bound(c => c.Name);
columns.Command(command => command
.Custom("Test").Click("payload"));
})
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("GetCars", "cars"))))
Как вы можете видеть из приведенного выше кода, я использовал пользовательскую команду, которая вызывает функцию, когдаВы нажимаете на это.Функция payload
и код:
полезная нагрузка
function payload(e) {
e.preventDefault();
//Get row data
var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
//Create Object
var obj = {
Name: dataItem.Name,
BHP: dataItem.BHP,
YearOfBuild: dataItem.YearOfBuild
}
//Post via Ajax
$.ajax({
type: 'POST',
url: '/Controller/Method/',
data: JSON.stringify({
array: obj
}),
cache: false,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
console.log("Success");
},
error: function (ob, errStr) {
console.log(ob.responseText);
}
});
}
Я получаю доступ к данным строки, по которой щелкнули, и передаю ее внизчерез параметр events, оттуда я создаю объект и добавляю к нему данные.Затем я создаю ajax-вызов и пытаюсь передать его контроллерам.
Контроллер ожидает параметр, код выглядит следующим образом, но для краткости сокращен.
Контроллер
public ActionResult Create(object[] obj)
{
return View(obj);
}
Если я использую "POST"
в своей функции ajax, я получаю сообщение об ошибке токена защиты от подделки, которое отсутствует.Если я использую "GET"
, параметр obj
всегда будет нулевым.
Требуемый файл cookie для защиты от подделки "__RequestVerificationToken" отсутствует.
Есть ли лучшеспособ сделать это или мой подход неверен?