首页 > 解决方案 > 无法从 KendoUI 获取 Post 值

问题描述

我按照https://demos.telerik.com/kendo-ui/multiselect/addnewitem使用 KendoUI Multi Select 添加新项目

在此处输入图像描述

控制器:

    [HttpPost]
    [Route("admin/blog/PostTag")]

    public IActionResult PostTag([FromForm]TagModel models)
    {            
        return Ok();
    }

模型总是得到空值,我也尝试不使用 [FromForm]PostTag(TagModel models)或使用 [FromBody] 但它不起作用。

在此处输入图像描述

标记模型类:

public class TagModel
{
    public int Id     {get;set;}
    public string Tag { get; set; }
}

查看页面上的 KendoUi:

 <select asp-for="Tag" data-placeholder="Chọn tag"></select>

                    <script id="noDataTemplate" type="text/x-kendo-tmpl">
                        # var value = instance.input.val(); #
                        # var id = instance.element[0].id; #
                        <div>
                            No data found. Do you want to add new item - '#: value #' ?
                        </div>
                        <br />
                        <button class="k-button" onclick="addNew('#: id #', '#: value #')" ontouchend="addNew('#: id #', '#: value #')">Add new item</button>
                    </script>
                    <script>
                        function addNew(widgetId, value) {
                            var widget = $("#" + widgetId).getKendoMultiSelect();
                            var dataSource = widget.dataSource;

                            if (confirm("Are you sure?")) {
                                dataSource.add({
                                    Id: 0,
                                    Tag: value
                                });
                                console.log(dataSource);
                                dataSource.sync();
                                //dataSource.one("requestEnd", function (args) {

                                //    if (args.type !== "create") {
                                //        return;
                                //    }
                                //     console.log(args.type)
                                //    var newValue = args.response[0].id;

                                //    dataSource.one("sync", function () {
                                //        widget.value(widget.value().concat([newValue]));
                                //    });
                                //});

                                //dataSource.sync();
                            }
                        }
                    </script>
                   <script>
                        $(document).ready(function () {
                            var crudServiceBaseUrl = "/admin/blog";
                            var dataSource = new kendo.data.DataSource({
                                batch: true,
                                transport: {
                                    read: {
                                        url: "https://localhost:44383/admin/blog/gettags"
                                    },
                                    create: {
                                        url: "https://localhost:44383/admin/blog/posttag",
                                        type: "POST",
                                        dataType: "jsonp" // "jsonp" is required for cross-domain requests; use "json" for same-domain requests
                                    },
                                    parameterMap: function (data, type) {
                                        if (type != "read" && data.models) {
                                            console.log(data.models);
                                            return { models: kendo.stringify(data.models) };
                                        };

                                    }
                                },
                                schema: {
                                    model: {
                                        id: "Id",
                                        fields: {
                                            Id: { type: "number" },
                                            Tag: { type: "string" }
                                        }
                                    }
                                }
                            });

                            $("#Tag").kendoMultiSelect({
                                filter: "startswith",
                                dataTextField: "Tag",
                                dataValueField: "Id",
                                dataSource: dataSource,
                                noDataTemplate: $("#noDataTemplate").html()
                            });
                        });
                    </script>

标签: c#asp.netasp.net-corekendo-ui

解决方案


我不知道为什么不能从 Kendo 中获取值,所以我从 Request 中检索数据。

在此处输入图像描述


推荐阅读