我有一个kendo网格,它使用kendo dataSource,我不习惯使用kendo dataSource进行内联编辑,通常我永远不会做内联编辑,但是我被要求这样做。
我的dataSource如下所示
function PriceLookupGridDataSource() {
var dataSource = new kendo.data.DataSource({
transport: {
read: {
url: "../KendoGridTesting/GetThePriceLookupGrid",
dataType: "json"
},
update: {
url: function(item) {
console.log(item);
return "../KendoGridTesting/PassAnObject?myObj=" + item;
}
}
},
schema: {
model: {
id: "MaterialTypeID",
fields: {
VendorID: { type: "number" },
VendorName: { type: "string" },
Description: { type: "string" },
MaterialTypeID: { type: "number" },
MaterialType: { type: "string" },
ServicePrice: { type: "string" },
SellUOM: { type: "string" },
Cost: { type: "string" },
PurchaseUOM: { type: "string" }
}
}
},
batch: false,
pageSize: 20
});
return dataSource;
}
用于传输更新的控制器方法是
[HttpPost]
public void PassAnObject(PriceLookupGrid myObj)
{
...
}
对象是
对象{VendorID: 26,VendorName:"ACME石头砌体“,描述:”特殊石材报价“,MaterialTypeID: 35,MaterialType:”熔覆“…}
PriceLookupGrid数据类是
public class PriceLookupGrid
{
public int VendorID { get; set; }
public string VendorName { get; set; }
public string Description { get; set; }
public int MaterialTypeID { get; set; }
public string MaterialType { get; set; }
public string NewPrice { get; set; }
public string RemodelPrice { get; set; }
public string ServicePrice { get; set; }
public string SellUOM { get; set; }
public string Cost { get; set; }
public string PurchaseUOM { get; set; }
}
当我试图把这个传递给我的控制器时,我会得到一个错误。
http://localhost:51193/KendoGridTesting/PassAnObject?id=[object%20Object]&V….0000&ServicePrice=0.0000++++&SellUOM=Each&Cost=0.0000&PurchaseUOM=EachBBB 404 (未找到)
它将"item“作为单独的参数传递,我不希望这种情况发生。
有什么想法吗?
发布于 2017-04-20 17:24:04
这是因为item
是一个对象,正如您在控制台中看到的那样。你不能只是把它串连在一个url字符串中。你要解析它。它有一个名为models
的属性,网格中的所有更改(或脏)行都将被发送到服务器。
为了使ASP.Net MVC将您的数据绑定到您的模型中,您必须发送以下日期:
../KendoGridTesting/PassAnObject?VendorID=1&VendorName=...
将数据“解析”到url的一个简单方法是:
var model = {VendorID: 26, VendorName: "ACME STONE MASONRY", Description: "Special Stone Quote", MaterialTypeID: 35, MaterialType: "Cladding"};
function modelToUrlParams(model) {
var params = [];
Object.keys(model).forEach(key => params.push(key + "=" + model[key]));
return encodeURI("?" + params.join("&"));
};
var myUrl = "../KendoGridTesting/PassAnObject" + modelToUrlParams(model);
console.log("Final Url", myUrl);
发布于 2017-04-20 18:10:22
您的操作应该是用[HttpPost]
修饰的,但是您的错误消息表明您正在执行GET
。您需要Kendo来POST
数据,而不是:
update: {
url: "../KendoGridTesting/PassAnObject",
type: "post"
}
https://stackoverflow.com/questions/43525709
复制相似问题