c# - 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.
}
问题是:这些数据何时何地变得正确?
解决方案
推荐阅读
- emacs - 在 Emacs 中按时间戳对行进行排序
- angular - 使用 routerLink 返回
- tomcat - 调用@EJB bean 时出现空指针异常
- sql-server-2012 - 如何使用表名查找数据库名?
- python-3.x - $PATH、sys.path 和 os.environ 之间的区别
- node.js - TypeError:无法读取未定义节点carto的属性“hasOwnProperty”
- email - ISP 可以阻止任何外发邮件端口吗?
- python - 使用 csv 在 Python 中绘制图形
- .net-core - VSTS dotnet Nuget Pack:不是有效的版本字符串
- python-3.x - 我无法理解编程流程