我想从我的ajax函数传递很多参数到我的控制器 . 最初,我以为我会使用查询字符串来执行此操作,但这并没有给我我想要的结果,尽管它创建了一个没有吸引力的URL,我添加的数据越多 .
我认为更好的方法是获取我需要传递的所有数据,将其存储为对象并将该有效负载从ajax函数传递到控制器中 .
ajax函数是从 KendoGrid 的 .event() 属性触发的 .
Kendo Grid
@(Html.Kendo().Grid()
.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 ,代码如下:
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调用并尝试将其传递给控制器 .
控制器需要参数,代码如下,但为了简洁起见缩短了 .
Controller
public ActionResult Create(object[] obj)
{
return View(obj);
}
如果我在我的ajax函数中使用 "POST" ,则会收到关于缺少防伪令牌的错误 . 如果我使用 "GET" ,则 obj 参数始终为null .
所需的防伪cookie“__RequestVerificationToken”不存在 .
有没有更好的方法来做这个或我的方法不正确?