Kendo ui 如何将剑道菜单绑定到远程数据源?

Kendo ui 如何将剑道菜单绑定到远程数据源?,kendo-ui,datasource,bind,kendo-menu,Kendo Ui,Datasource,Bind,Kendo Menu,下面是我的代码 $("#lhsPanelBar").kendoMenu({ orientation: 'vertical', dataSource: { type: 'json', transport: { read: "http://localhost:3549/api/LHSMenu" } }, }); 但控制器上并没有服

下面是我的代码

$("#lhsPanelBar").kendoMenu({
    orientation: 'vertical',
    dataSource:
        {
            type: 'json',
            transport:  {
                    read: "http://localhost:3549/api/LHSMenu"
                }
        },
});
但控制器上并没有服务器点击,菜单显示为“未定义”

控制器代码

public class LHSMenuController : ApiController
{
    private IRepo repo;
    public LHSMenuController()
    {
        repo = new Repository();
    }

    [HttpGet]
    public IEnumerable<LHSMenu> GetLHSMenu()
    {
        return this.repo.Menu;
    }
}
公共类LHSMenuController:ApiController
{
私人IRepo回购;
公共LHSMenuController()
{
repo=新存储库();
}
[HttpGet]
公共IEnumerable GetLHSMenu()
{
返回此.repo.Menu;
}
}

您应该以json友好格式为菜单返回结果。试试这个:

[HttpGet]
public IEnumerable<LHSMenu> GetLHSMenu()
{
    return Json(this.repo.Menu,JsonBehavoir.AllowGet);
}
[HttpGet]
公共IEnumerable GetLHSMenu()
{
返回Json(this.repo.Menu,JsonBehavoir.AllowGet);
}

剑道UI菜单暂时不支持绑定到远程数据源。

剑道菜单无法直接绑定到远程数据源,但您可以使用数据源的更改方法并使用此功能创建菜单,请尝试以下操作:

var menuDataSource = new kendo.data.DataSource({
                      transport: {
                            read: {
                              url: "/app/test/menuItems",
                              dataType: "json"
                            }
                          },
                        change: function() {
                            var dataMenu = this.data(); 
                            console.log("from change: " + dataMenu.length);
                            for (var indexMenuDataSource = 0; indexMenuDataSource < dataMenu.length; indexMenuDataSource++) {
                                var objectToPut = {};
                                var data = dataMenu[indexMenuDataSource];
                                objectToPut.text = data.text;
                                objectToPut.url = data.url;
                                objectToPut.cssClass = data.cssClass;
                                objectToPut.imageUrl = data.imageUrl;
                                if(data.items.length > 0){
                                    objectToPut.items = [];
                                    for(var indexSubItem = 0; indexSubItem < data.items.length; indexSubItem++){
                                        var subItem = {};
                                        subItem.text = data.text;
                                        subItem.url = data.url;
                                        subItem.cssClass = data.cssClass;
                                        subItem.imageUrl = data.imageUrl;
                                        objectToPut.items.push(subItem);                                            
                                    }
                                }
                                menu.insertAfter(objectToPut,  menu.element.children("li:last"));
                            }
                        }
            });

            var menu = $("#menuTest").kendoMenu().data("kendoMenu");
            menuDataSource.read(); //Will launch the change function
var menuDataSource=new kendo.data.DataSource({
运输:{
阅读:{
url:“/app/test/menuItems”,
数据类型:“json”
}
},
更改:函数(){
var dataMenu=this.data();
log(“来自更改:+dataMenu.length”);
对于(var indexmenudasource=0;indexmenudasource0){
objectToPut.items=[];
对于(var indexSubItem=0;indexSubItem

注意:这是一个草稿,创建另一个函数来迭代sub>sub>sub项。

你能分享控制器的代码吗?答案很好,如果菜单返回零项,你有错误处理吗?我正试图通过这种方式解决问题,但并不是很成功。