javascript - Kendo MVC Treeview 获取所有选中的节点并将它们传递给 Controller

标签 javascript c# asp.net-mvc kendo-asp.net-mvc kendo-treeview

第一次使用 MVC5 和 Telerik...我正在阅读 Active Directory 并将所有安全组显示在 TreeView 中。管理员完成选择 Angular 色后,他/她应按下“保存组”按钮,然后 javascript 应该获取所有节点并将它们传递给 Controller ​​。 Controller 将保存到数据库。我需要知道如何访问给定节点的数据上下文。获取数据上下文后,我可以继续获取所有节点上下文并将其传递给 Controller ​​。

Kendo Treeview 和按钮:

@{
    ViewBag.Title = "Configure";
}
@model IEnumerable<CMDB.Web.Models.AdminGroups>

<div>
    <input id="save" type="button" value="Save Groups" onclick="SaveData()" />
    <input id="return" type="button" value="Return" onclick="location.href='@Url.Action("Index", "Admin")'" />

    @(Html.Kendo().TreeView()
        .Name("treeview")
        .Checkboxes(checkboxes => checkboxes
            .Name("checkedFiles")
            .CheckChildren(true)
        )
        .Events(events => events.Check("onCheck"))
        .DataTextField("Name")
        .AutoScroll(true)
        .DataSource(source => source
            .Model(model => model.Id("id").HasChildren("hasChildren"))
            .Read(read => read.Action("GetActiveDircetoryGroups", "Configure"))
        )
    )
</div>

Javascript:
<script type="text/javascript" >
    //show checked node IDs on datasource change
    function onCheck() {
        var treeView = $("#treeview").data("kendoTreeView");
    var id = treeView.dataItem(e.node);
    }

function SaveData() {

    var AllSelectedNodes = new Array();
    AllSelectedNodes = ($("#treeview .k-item input[type=checkbox]:checked").closest(".k-item"));
    alert(AllSelectedNodes.join('\n'));
    var myApiUrl = '@Url.HttpRouteUrl("DefaultAPI", new { controller = "AdminValues", action = "SaveSelectedAdmins"})';
    var movies = $.ajax({
            url: myApiUrl,
        type: 'POST',
        data: AllSelectedNodes
    });
    }

</script>

Controller :
[HttpPost]
public void SaveSelectedAdmins(IEnumerable<CMDB.Web.Models.AdminGroups> ag)
{
    string Sids = string.Empty;
    foreach (var s in ag)
    {
        var pc = new PrincipalContext(ContextType.Domain, "", "");//blank for security purposes
        GroupPrincipal gp = GroupPrincipal.FindByIdentity(pc, IdentityType.Guid, s.id.Value.ToString());
        if (s.id.Value.ToString() == gp.Guid.Value.ToString())
        {
            Sids = Sids + "," + gp.Sid;
        }
    }
    using (var ctx = new Data.DBContext())
    {
        var d2 = (from d in ctx.Set<Entities.Config>()
                  where d.Property == "str"
                  select d).SingleOrDefault();
        d2.Value = Sids;
        ctx.SaveChanges();
    }
}

最佳答案

使用 $.post 而不是 $.ajax 解决了这个问题。

关于javascript - Kendo MVC Treeview 获取所有选中的节点并将它们传递给 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35756196/

相关文章:

C# 获取光标处的控制权

.net - System.Web.Abstractions : what is it good for?

asp.net-mvc - Asp.net MVC ModelState.Clear

c# - C# 中的 float 到十六进制

c# - 400 BAD 请求尝试联系 Azure 异常检测 API

jquery - 自动完成应用值而不是标签到文本框

javascript - 根据对象名称合并嵌套的对象数组

javascript - 如何在 CSS 或 Javascript 中定位选定的属性(在 HTML 选项中)

javascript - jQuery - 使用数据属性过滤表

javascript 样式比较不起作用