首页 > 解决方案 > Kendo UI webmethod 为复选框返回不同的@checked 值,并且相应的 JS 方法获取正确的值

问题描述

问题:我有一个菜单项,旁边有开/关切换按钮。

在前面,我有一个在后端调用 BindTree [WebMethod] 的 JS 文件。BindTree 返回数据 - 哪个项目具有 ON(true) 值,哪个项目具有 OFF(false) 值。

我想不通的是,在调试/记录时,BindTree() 提供了不正确的数据,而在 JS 文件中,调用 BindTree() 的方法获取并显示了正确的数据。这是如何运作的?

示例:我有 3 个菜单项。他们都将按钮设置为 ON(true)。 A - 正确 B - 正确 C - 正确

如果我戴上调试器并检查 BindTree() 给出的后端方法,我会像这样 A - FALSE; B - 错误;C - 真; 不要介意这些值,它会随机给出不正确的数据。

然后,如果我将 console.log 放在 JS 文件中,我会看到从 BindTree() 获取的数据是正确的。 A - 正确 B - 正确 C - 正确

JS文件:

var dataSource, eDataSource;
function BindTree() {
    if (!dataSource) {
        dataSource = getDataSource("A");
        console.log(dataSource); //CHECKED HERE AND DATA IS CORRECT
        $("#treeviewTab").kendoTreeView({
            dataSource: dataSource,
            checkboxes: {
                checkChildren: true
            },
            loadOnDemand: false,
            dataTextField: "MenuName"
        });
    }
    else {
        var tree = $("#treeviewTab").data("kendoTreeView");
        tree.dataSource.read();
        tree.updateIndeterminate();
    }
}

function getDataSource(type) {
    var tdataSource = new kendo.data.HierarchicalDataSource({
        transport: {
            read: function (options) {
                var result = SyncroJSONArray("SamplePage.aspx/BindTree", type);
                options.success(result);
            }
        },
        schema: {
            model: {
                children: "Children",
                hasChildren: "hasChildren",
                id: "MenuId"
            }
        }
    });
    return tdataSource;
}
function SyncroJSONArray(url, mType) {
    var obj;
    $.ajax({
        type: 'POST',
        url: url,
        data: "{'roleId':'" + $(myControls.hidRoleID).val() + "','mType':'" + mType + "','UiD':'" + $(myControls.hdnUiD).val() + "'}",
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        async: false,
        success: function (result) {
            obj = result.d;
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
        }
    });

    return obj; //CHECKED AND DATA IS CORRECT
}

后端。示例页面.aspx.cs

    [WebMethod]
            public static List<MenuAccessEntity.Item> BindTree(string roleId, string mType, string UiD)
            {
                string parentMenuId = mType
                return GenerateTree(roleId, parentMenuId, UiD).TreeMenuList;
            }      
private static MenuAccessEntity GenerateTree(string RoleId, string parentMenuId, string UserId)
        {
            //some logic here
            objAccessTree = adminRights.GetAccessTreeMenus(objAccessTree);
            //logging. result is incorrect data;
            StringBuilder tempLog = new StringBuilder();
            foreach (var item in objAccessTree.TreeMenuList)
            {
                tempLog.Append($"MenuName : {item.MenuName} || Checked : 
                {item.@checked}"+Environment.NewLine);
            }


            return objAccessTree; //THIS DATA IS NOT CORRECT. 
        }
  

            

问题是:这些数据何时何地变得正确?

标签: c#asp.netkendo-uiwebformstelerik

解决方案


推荐阅读