2

剣道ドロップダウン リストに問題があります。ドロップ ダウンはオブジェクト オブジェクトを返しますが、文字列が必要です。誰か助けてくれませんか。ここでコード。私の英語でごめんなさい、私はロシア出身です

MyScript.js:(管理コントローラからデータを取得)

 $(document).ready(function () {
    $("#grid").kendoGrid({

        dataSource: {
            type: 'odata',
            serverSorting: true,
            serverFiltering: true,
            serverPaging: true,

            transport: {
                read: {
                    url: "/api/Admin",
                    dataType: "json",
                    contentType: "application/json",
                },
                create: {
                    url: "/api/Admin",
                    dataType: "json",
                    type: "POST"
                },
                update: {
                    url: function (AdminModel) {
                        return "/api/Admin/" + "?roles=" + AdminModel.Roles
                    },
                    dataType: "json",
                    type: "PUT"
                },
                destroy: {
                    url: function (AdminModel) {
                        return "/api/Admin/" + "?name=" + AdminModel.Name
                    },
                    dataType: "json",
                    type: "DELETE"
                },
                parameterMap: function (model, operation) {
                    if (operation !== "read" && model) {
                        return kendo.stringify(model);
                    }
                }
            },
            schema: {
                data: function (response) {
                    if (response.value !== undefined)
                        return response.value;
                    else {
                        delete response["odata.metadata"];
                        return response;
                    }
                },
                total: function (response) {
                    return response['odata.count'];
                },
                model: {
                    id: "ID",
                    fields: {
                        ID: { editable: false },
                        Name: { type: "string", editable: false, nullable: false, validation: { required: true } },
                        Roles: { type: "string", editable: false },
                        NewRole: { type: "string" },

                    }
                }
            }
        },


        height: 560,
        sortable: true,
        pageable: true,
        editable: "popup",
        columns: [
           { field: "ID", width: 50 },
           { field: "Name", title: "Name", width: 120 },
           { field: "Roles", title: "Roles", width: 120},
           { field: "NewRole", hidden:true,title: "NewRole", editor: RoleDropDownEditor, template: "#=NewRole#" },
           { command: ["destroy", "edit"], title: " ", width: "120px" }
        ]
    });
});
My Drop Down List(get data from Role controller)
function RoleDropDownEditor(container, options) {
    $('<input required  data-bind="value:' + options.field + '"/>')
        .appendTo(container)
        .kendoDropDownList({

            dataTextField: "Role",
            dataValueGield: "Id",
            autoBind: false,
            dataSource: {
                transport: {
                    read: {

                        url: "/api/Role",
                        dataType: "json",
                        contentType: "application/json",

                    },
                    schema: {
                        model: {
                            fields: {
                                Id:{type:"string"},
                                Role: { type: "string" }

                            }
                        }
                    }
                }


            }

        });
}

コントローラ

Web API class Role.cs

    using MyCMS.Models;
using System.Web.Security;

namespace MyCMS.Controllers
{
    public class RoleController : ApiController
    {
        private UsersContext db = new UsersContext();

        public class MyRole
        {
            public string Id { get; set; }
            public string Role { get; set; }
        }

        // GET api/usermanage

        public List<MyRole> Get()
        {
            var result = new List<MyRole>();
            foreach (var role in Roles.GetAllRoles())
            {
                result.Add(new MyRole{ Id = role, Role = role});
            }
            return result;
        }
    }
}

意見

    <head>
    <title></title>
</head>

<div id="grid"></div>

@section Scripts{

    @Styles.Render("~/Content/kendo/2013.2.716/css")
    @Scripts.Render("~/bundles/kendo")
    @Scripts.Render("~/bundles/Admin")

}
4

3 に答える 3

16

この投稿とこのKendo Docをチェックしてください。ValuePrimitive を「true」に設定すると、この問題が解決しました。

どうやら、モデルのフィールドが null の場合、Kendo は項目全体をフィールドに割り当てようとします。ValuePrimitive を true に設定すると、それが防止され、代わりに値フィールドが割り当てられます。

于 2014-04-01T22:23:30.340 に答える
0

ドロップダウン リストのデータソースが正しく構成されていません。トランスポート内でスキーマを定義しました。これは必要な場所ではありません。右中括弧を間違った場所に置きます。これがどのように見えるかです:

dataSource: {
  transport: {
    read: {
      url: "/api/Role",
      dataType: "json",
      contentType: "application/json"
    }
  },  // YOU WERE MISSING THIS
  schema: {
    model: {
      fields: {
        Id: { type: "string" },
        Role: { type: "string" }
      }
    }
  }
  // REMOVED AN INCORRECTLY PLACED } FROM HERE
}
于 2013-08-30T05:02:45.827 に答える