Kendo网格添加另一个数据源作为保存模型的对象

时间:2018-05-09 17:45:02

标签: kendo-ui kendo-grid asp.net-core-webapi

所以我正在努力学习剑道,努力推动我们的雇主更接近为我们新的网络发展议程购买一些许可证。 我在内部Web服务器上设置并运行Core2 API,并尝试使用它来为另一个应用程序创建管理页面。

导致这种情况(如下所述)的原因是什么,以及处理它或我尝试的最佳方法是什么?

设置网格和显示已完成,但在将数据正确地返回API时遇到问题。 这似乎是一个奇怪的问题,与下拉列表作为2个字段的数据源有关。

首次加载页面时,模型与数据源模式中定义的模型匹配。

schema: {
            model: {
                id: "id",
                fields: {
                    projectName: { validation: { required: true, max: 150 } },
                    projectDescr: { validation: { required: true, max: 500 } },
                    projectOwner: { validation: { required: true, max: 125 } },
                    projectCoder: {type:"number", required:true, validation: { required: true }, from:"projectCoder"},
                    projectCoderNavigation: {  from: "projectCoderNavigation", nullable:false},
                    projectEstHours: {type: "number", validation: {min: 0}},
                    statusId: { validation: { required: true },  from:"statusId"},
                    statusReason: { validation: { max: 125 },from:"statusReason" }
                }
            }

Kendo网格列

columns: [
            {field: "projectName", title: "Project Name"},
            {field: "projectDescr", title: "Description", editor: descrEditor},
            {field: "projectOwner", title: "Project Owner"},
            {field: "projectCoder", title: "Programmer", editor:  programmerDDL, template:"#= projectCoderNavigation.adName#" },
            {field: "statusId", title:"Status", editor: statusDDL, template:"#= statusReason#"},
            {field: "projectEstHours", title: "Estimated Hours"}

从服务器返回的模型数据(chrome dev工具)。这里它匹配上面的模型,但projectCoderNavigation属性还包括projectTime,Tasks和项目的重复。

Model data returned from server

单击“添加新记录”按钮时,模型数据将正确更新为空白数据。

model data is updated with blank data correctly

但是,一旦我点击保存,模型就会更改,并添加一个新对象“adName”,并匹配用于选择的下拉列表的数据源。 projectCoder保持为0,projectCoderNavigation保持为null,其他字段也会更新。

after save - before actual POST

当然,由于模型状态无效,POST失败。

fiddler fail input not valid

修改

这是填充DDL编辑器的功能。

function programmerDDL(container, options) {
   // var input = $("<input/>");
    //input.attr("projectCoderNavigation.adName",options.field);
   // input.append(container);

    $('<input type="text" class="k-input k-textbox"  name="adName"/>')
        .appendTo(container)
        .kendoDropDownList({
            autoBind: false,
            //valuePrimitive: true,
            dataTextField: "adName",
            dataValueField: "id",
            dataSource: usersListDs,
            text: "Select someone"

            });
}

这是将编辑器分配给下拉列表。

{field: "projectCoder", title: "Programmer", editor:  programmerDDL, 
template:"#= projectCoderNavigation.adName#" },

注意:

我已经设法解决了这个问题,因此我通过参数map分配了projectCoder,但仍然有空的projectCoderNavigation属性和不需要的&#34; adName&#34; options.models中的对象。

parameterMap: function(options, operation) {
    if (operation !== "read" && options.models) {
        console.log("model: "+options.models);
        if (operation === "create") {
            options.models[0].projectCoder = options.models[0].adName.id;
            }
            console.log(options.models);
            console.log(kendo.stringify(options.models));
     return  options.models;
         }
     }

编辑2

所以我已经进展到可以验证请求是否已到达API的位置,可能会关闭此问题,但我会先提供更多信息。

单击“保存”时,API会收到POST请求。但是,该方法不使用来自有效载荷的数据。

Mutliple signatures I've attempted

响应是HTTP代码500,因为模型为null并且插入因外键约束而失败。

  

INSERT语句与FOREIGN KEY约束冲突   &#34; FK_att_projects_att_Users&#34 ;.冲突发生在数据库中   &#34; ASSIST_TimeTracking&#34;,table&#34; dbo.att_users&#34;,column&#39; id&#39;。该   声明已被终止。

request headers from chrome dev tools

0 个答案:

没有答案