首页 文章

Telerik TreeView for ASP.NET MVC ajax的问题

提问于
浏览
0

Telerik的TreeView控件虽然花哨且具有很多功能,但现在证明对我来说是一场噩梦 . 但是我找不到更好的TreeView控件,它支持折叠/扩展等,并且有一些文档 . 这是我的问题 .

这是网站的主人:_Layout.cshtml

<!DOCTYPE HTML>
<html>
<head>
    <title>@ViewBag.Title</title>
    <!--
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/custom.css")" rel="stylesheet" type="text/css" />-->
    @(Html.Telerik().StyleSheetRegistrar()
                    .DefaultGroup(group => 
                        group.Add("telerik.common.css")
                             .Add("~/Content/Site.css")
                             .Add("~/Content/custom.css")
                             .Add("~/Content/themes/humanity/jquery-ui-1.8.18.custom.css")
                    .Combined(true)
                    .Compress(true)))
</head>
<body>
    <div class="page">
        <header>
            <div id="header-logo">
                    <img alt="X" src="../../Content/Images/logo100.png"/>
            </div>
            <div id="title">
                <h1>title</h1>
            </div>

            @(Html.Telerik().Menu()
                    .Name("menu")
                    .Items(menu =>
                    {
                        menu.Add().Text("Home").Action("Index", "Home");
                        menu.Add().Text("Products")
                            .Items(item =>
                                       {
                                           item.Add().Text("xxx").Action("xxx", "Products");
                                           item.Add().Text("xxx").Action("xxx", "Products");
                                           item.Add().Text("xxx").Action("xxx", "Products");
                                           item.Add().Text("xxx").Action("xxx", "Products");
                                       });
                        menu.Add().Text("Events").Action("Index", "Events");
                        menu.Add().Text("About Us").Action("About", "Home");
                        menu.Add().Text("Admin").Action("Index", "Admin");
                    })
                    .HtmlAttributes(new { style = "text-align:left;" }))
        </header>
        <section id="main">
            @RenderBody()
        </section>
        <footer>
        </footer>
    </div>
    @(Html.Telerik().ScriptRegistrar()
                        .Scripts(script=>script.Add("~/Scripts/custom.js"))
                        .Globalization(true)
                        .DefaultGroup(group => group.Combined(true)
                                                    .Compress(true)))
</body>
</html>

这是基页视图:Index.cshtml

@{
    ViewBag.Title = "Admin";
}
<h2>
    Admin Index</h2>
<div id="navAdminLeft">
    @(Html.Telerik().TreeView()
    .Name("AdminNavTree")
    .Items(item =>
               {
                   item.Add().Text("Products");
                   item.Add().Text("Categories");
                   item.Add().Text("Materials");
                   item.Add().Text("Finishes");
                   item.Add().Text("Packaging");
                   item.Add().Text("File Manager");
                   item.Add().Text("CategoryTree");
               })
        .ClientEvents(events => events.OnSelect("loadAdminContent"))
           )
</div>
<div id="adminContent">
</div>
<script type="text/javascript">
    function loadAdminContent(e) {
        $.ajax({
            type: "GET",
            cache: false,
            url: "Admin/" + e.item.innerText,
            data: {},
            success: function (data) {
                $("#adminContent").html(data);
            }
        });
    }
</script>

每当用户选择 #AdminNavTree 上的节点时,该页面就会获取要显示的内容并填充 #adminContent . 我正在尝试构建一个编辑页面,其中一个div中列出了一个类别树,当用户单击该div上的任何类别时,详细信息是ajax加载到同一页面上的另一个div中 . 这是部分树的部分视图,它被加载到 #adminContent :_CategoryTree.cshtml中

@using xxx.Models.Navigation
@model IEnumerable<NavigationItem>

<div id="categoryTree">      
 @{Html.Telerik().TreeView()
    .Name("ctree")
        .BindTo(Model, mappings => 
            mappings.For<NavigationItem>(binding => binding
                    .ItemDataBound((currentItem, navigationItem) =>
                        {
                            currentItem.Text = navigationItem.Text;
                            currentItem.Expanded = true;
                                                        })
                    .Children(child => child.Items)

                ))
    .ClientEvents(events=>events.OnSelect("loadContent"))                                  
    .Render();
}
</div>
<div id="detail"></div>
<script type="text/javascript">
    function loadCategoryDetail(e) {
        $.ajax({
            type: "POST",
            url: "Admin/CategoryDetails",
            data: { id: $("#ctree").data("tTreeView").getItemText(e.item) },
            success: function (data) {
                $("#detail").html(data);
            }
        });
    }
</script>

加载ajax的详细信息页面不包含任何telerik控件,因此列出代码是非问题 .

问题:这不会呈现 . 一旦它尝试渲染 #ctree treeview它就会开始抛出所有类型的脚本错误,特别是忽略了loadCategories(说没有找到) . 到目前为止,我认为正在发生的是包含树视图的ajax加载的部分页面正在重新加载jquery lib,从而破坏脚本中的所有旧绑定和函数 . 有没有办法让这个工作,一个页面上的两个树视图,一个先前加载的,一个在ajax加载的局部视图中,两个绑定到单独的数据?

1 回答

  • 0

    我在jsTree上取得了很大的成功...对你的telerik问题没有帮助,但可能值得一试 .

    http://www.jstree.com/

相关问题