首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Kendo向控制器发送对象?

如何从Kendo向控制器发送对象?
EN

Stack Overflow用户
提问于 2017-04-20 17:04:02
回答 2查看 2.8K关注 0票数 1

我有一个kendo网格,它使用kendo dataSource,我不习惯使用kendo dataSource进行内联编辑,通常我永远不会做内联编辑,但是我被要求这样做。

我的dataSource如下所示

代码语言:javascript
运行
复制
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;
}

用于传输更新的控制器方法是

代码语言:javascript
运行
复制
[HttpPost]
public void PassAnObject(PriceLookupGrid myObj)
{
    ...
}

对象是

对象{VendorID: 26,VendorName:"ACME石头砌体“,描述:”特殊石材报价“,MaterialTypeID: 35,MaterialType:”熔覆“…}

PriceLookupGrid数据类是

代码语言:javascript
运行
复制
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“作为单独的参数传递,我不希望这种情况发生。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-20 17:24:04

这是因为item是一个对象,正如您在控制台中看到的那样。你不能只是把它串连在一个url字符串中。你要解析它。它有一个名为models的属性,网格中的所有更改(或脏)行都将被发送到服务器。

为了使ASP.Net MVC将您的数据绑定到您的模型中,您必须发送以下日期:

代码语言:javascript
运行
复制
../KendoGridTesting/PassAnObject?VendorID=1&VendorName=...

将数据“解析”到url的一个简单方法是:

代码语言:javascript
运行
复制
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);

票数 0
EN

Stack Overflow用户

发布于 2017-04-20 18:10:22

您的操作应该是用[HttpPost]修饰的,但是您的错误消息表明您正在执行GET。您需要Kendo来POST数据,而不是:

代码语言:javascript
运行
复制
update: {
    url: "../KendoGridTesting/PassAnObject",
    type: "post" 
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43525709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档