【问题标题】:Kendo grid: destroy functionality not working剑道网格:破坏功能不起作用
【发布时间】:2015-12-09 15:08:53
【问题描述】:

我有一个剑道网格,在其中显示用户上传的文档列表。在网格中,我有一个名为“Delete”的按钮,它触发调用删除服务类的 dataSource 函数“destroy”。为了实现文档的删除,我通过在我的数据源中执行以下操作将用户选择的 documentId 传递到服务类的查询中:

   destroy: {
                        url: function (options) {
                            options.IsActive = false;
                          // type: "POST";                             
                            contentType: "application/json; charset=utf8";
                            return constants.serviceUrl + "Document/Delete?id=" + options.DocumentId;
                        },
                    },
                    dataType: "json",
                    contentType: "application/json"
                },

由于某种原因,它与 documentId 一起添加了与此文档关联的所有数据,这不是我打算做的。这是 URL 在 fiddler 中的样子。

http://localhost/Services/HumanResources/api/Document/Delete?id=2&DocumentId=2&ReviewId=0&DocumentTypeId=2&Name=Applications+to+Install.docx&DocumentData=UEsDBBQABgAIAAAAIQCUZeTvkgEAAK4HAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe&CreatedById=00000000-0000-0000-0000-000000000000&CreatedDate=0001-01-01T00%3A00%3A00&RawFileName=&DocumentTypeName=Manager

我已经为我的销毁函数设置了断点,并确保 documentID 只有一个数字。由于这个错误的长 URL,服务类永远不会受到影响。下面是提琴手的说法:

> HTTP/1.1 414 Request-URI Too Long
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Wed, 09 Dec 2015 15:00:46 GMT
Connection: close
Content-Length: 329

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Request URL Too Long</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Request URL Too Long</h2>
<hr><p>HTTP Error 414. The request URL is too long.</p>
</BODY></HTML>

知道我的销毁函数添加了我什至没有传递到服务 URL 链接的所有额外数据吗?

【问题讨论】:

    标签: jquery kendo-ui kendo-grid


    【解决方案1】:

    我认为默认情况下 kendo dataSouce 会将整个模型添加到每个 ajax 方法。您可以编写自己的参数映射函数,如下例所示:http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-transport.destroy

    但您需要检查 read/update/create 函数是否保持获取正确的数据。

    所以添加到你的 dataSource parameterMap 返回空对象的销毁请求类型,并为其他人传递模型属性:

    parameterMap: function(data, type) {
      if (type === "destroy") {
        return {  };
      }
      else {
           return { models: kendo.stringify(data.models) };
      }
    }
    

    【讨论】:

    • 嗨@Jaroslaw。感谢您为我指明正确的方向。我不确定为什么销毁调用将整个模型添加到 ajax 调用。但做上述解决了我的问题。我不清楚在 type ==="destroy" 下 return { } 做了什么
    • 哎呀,返回 {} 覆盖默认的剑道返回整个模型行为,并意味着返回空对象。您还可以通过从那里删除 DocumentId 并在此处返回来更改您的销毁 url 函数:return { id: options.DocumentId }; 您可能仍然希望 readupdatecreate 以相同的方式工作,因此您必须只返回任何销毁类型. (=== 与 == 相同,但它也比较数据类型,使用 === 代替 == 是一个好习惯。
    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多