ASP.NET MVC 3 Treeview - PullRequest
       32

ASP.NET MVC 3 Treeview

10 голосов
/ 02 апреля 2011

Мне нужно отобразить Treeview в моем приложении MVC3. Будет иерархическая таблица с самоссылкой (папки) и другая связанная с ней таблица (документы.) (Поэтому папки могут иметь N-subFolders, а любая папка / подпапка может содержать много документов.)

Я рассмотрел использование сторонних поставщиков, таких как Telerik, DJME и MVC Controls Toolkit. В то время как все хорошие пакеты, меня беспокоят лицензии, и, поскольку я новичок в MVC (и в программировании в целом), я нахожу, что их документации не хватает для правильной работы дисплея.

Я также просмотрел блоги с множеством ссылок на TreeViews:

TreeViewHelper и рекурсивное частичное представление

В дополнение к другим менее ссылочным статьям (первые 3 также очень информативны):

  1. http://tpeczek.com/2010/01/asynchronous-treeview-in-aspnet-mvc.html
  2. http://mikehadlow.blogspot.com/2008/10/rendering-tree-view-using-mvc-framework.html
  3. http://www.tek -tips.com / viewthread.cfm? QID = 1637392 & страница = 4
  4. http://weblogs.asp.net/jigardesai/archive/2008/02/04/display-hierarchical-data-in-asp-net-mvc-framework.aspx
  5. http://www.jigar.net/articles/viewhtmlcontent311.aspx
  6. http://help.syncfusion.com/ug_82/ASP.NETMVCUI_Tools/CreatingATreeViewControl.html

Я хотел бы использовать TreeViewHelper или метод рекурсивного частичного просмотра.
Однако в TreeViewHelper я не могу заставить его извлекать данные из второй таблицы (т.е. я могу только сделать так, чтобы он перечислял файлы, но я не уверен, как сделать так, чтобы он перечислял документы для каждого файла.)
Что касается Рекурсивного Частичного Представления, я все еще в растерянности, как преобразовать это в MVC3, а также в общую реализацию. Я нашел сообщение (forums.asp.net/t/1652809.aspx/1?treeview+with+mvc+3), в котором объясняется, как преобразовать его в MVC3, но мне все еще неясно, Что с этим делать. Я получаю сообщение об ошибке для частичного представления: Не удается неявно преобразовать тип 'void' в тип 'object'

Как я уже говорил, я новичок в MVC3 и хотел бы узнать, какой метод лучше всего подойдет для моего сценария и как его реализовать.

Ответы [ 3 ]

5 голосов
/ 12 апреля 2011

Если кому-то интересно, я решил эту проблему, используя рекурсивное частичное представление.Проблема, с которой я столкнулся, заключалась в том, что в SQL / EF не было настроено самообращающееся отношение (у меня просто было поле ParentID, которое не было связано с первичным ключом.) Я также интегрировал jsTree, так как он имеетмного приятных функций, таких как поиск.

Как я уже говорил в комментарии выше, @ Html.Action и @ Html.Partial работают вместо @ Html.RenderAction и @ Html.RenderPartial.

0 голосов
/ 24 марта 2014
    $(document).ready(function () {
        BindChart();
    });
    function BindChart() {
        $("#org").jOrgChart({
            chartElement: '#chart',
            dragAndDrop: true
        });
    }
    $(".cardadd").live("click", function ()
    {
        var data = { id: 0 , ParentId:$(this).parent().data('cardid')};
        OpenForminWindow('divfrmChartMember', 'divChartMember', 'frmChartMember', chart.ChartMember, data, '', 400, 1000);
    });
    $(".cardedit").live("click", function () {
        var data = { id: $(this).parent().data('cardid')};
        OpenForminWindow('divfrmChartMember', 'divChartMember', 'frmChartMember', chart.ChartMember, data, '', 400, 1000);
    });

    $(".cardremove").live("click", function () {

    });
    function OpenForminWindow(popupId, targetDivId, formid, url, data, callbackfunc, heigth, width) {
        $.ajax({
            type: "GET",
            url: url,
            data: data,
            cache: false,
            success: function (data) {
                $('#' + targetDivId).html(data);
                $('#' + formid).removeData('validator');
                $('#' + formid).removeData('unobtrusiveValidation');
                $('#' + formid).each(function () { $.data($(this)[0], 'validator', false); }); //enable to display the error messages
                $.validator.unobtrusive.parse('#' + formid);
                if (callbackfunc)
                    return callbackfunc();
            }
        });

        $("#" + popupId).dialog({
            modal: true,
            height: heigth,
            width: width,
            beforeClose: function (event, ui) {
                if (typeof refresh !== 'undefined' && refresh == true)
                    ReloadCurrentPage();
            }
        });
    }
    $('#frmChartMember').live('submit', function (e) {
        SubmitAjaxForm($(this).attr('id'), chart.AddMember, ReloadChart);
        e.preventDefault();
    });
    function SubmitAjaxForm(formId, url, callBack) {
        $.ajax({
            url: url,
            type: 'post',
            cache: false,
            data: $('#' + formId).serialize(),
            success: function (data) {
                return callBack(data);
            },
        });
    }
    function ReloadChart(result) {
        ClosePopup('divfrmChartMember');
        $.ajax({
            type: 'GET',
            url: chart.ChartList,
            cache: false,
            success: function (result) {
                $("#orgChart").html(result);
                BindChart();

            }
        });
    }
    function ClosePopup(divid) {
        $("#" + divid).dialog("close");

    }

открытый класс ChartController: Controller { // // GET: / Chart / ChartContext ctx = new ChartContext (); публичный указатель ActionResult () { возврат View (); } public ActionResult OrgChart () { return PartialView ("_ OrgChart", ctx.Cards.ToList ()); } public ActionResult ChartMember (int id, int? ParentId = null) { Карта карты = новая карта (); если (id> 0) card = ctx.Cards.Find (id); еще card.ParentId = ParentId; вернуть PartialView («_CartMember», карта); } public ActionResult SaveMember (Карточная карта) { если (card.id == 0) ctx.Cards.Add (карта); еще ctx.Entry (card) .State = System.Data.EntityState.Modified; ctx.SaveChanges (); вернуть Json (true, JsonRequestBehavior.AllowGet); } }

0 голосов
/ 23 июня 2011

посмотрите на шаблон редактирования TreeView моего набора инструментов управления Mvc здесь: http://mvccontrolstoolkit.codeplex.com/wikipage?title=TreeView

...