【问题标题】:Kendo MVC Treeview get all checked nodes and pass them to the ControllerKendo MVC Treeview 获取所有选中的节点并将它们传递给控制器
【发布时间】:2016-03-02 19:18:00
【问题描述】:

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

剑道树形视图和按钮:

@{
    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>

控制器:

[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();
    }
}

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多