ASP.NET MVC 3 Treeview
Мне нужно отобразить Treeview в моем приложении MVC3. Будет создана иерархическая таблица (Folders) для самостоятельной привязки и другая связанная с ней таблица (Documents.) (Таким образом, папки могут иметь N-subFolders, а в любой папке/подпапке может быть много документов.)
Я изучил использование сторонних поставщиков, таких как Telerik, DJME и MVC Controls Toolkit. В то время как все приятные пакеты, я не понимаю о лицензиях, и поскольку я новичок в MVC (и вообще в программировании), я нахожу их документацию, не требующую правильного отображения работы.
Я также посмотрел блоги с высокой степенью привязки в TreeViews:
TreeViewHelper
и Рекурсивный частичный просмотр
В дополнение к другим менее ссылочным статьям (верхние 3 также очень информативны):
Я хотел бы использовать либо TreeViewHelper, либо метод рекурсивного частичного просмотра.
Тем не менее, в TreeViewHelper я не могу заставить его извлекать данные из второй таблицы (т.е. Я могу только перечислить файлы, но я не уверен, как это перечислить документы для каждого файла.)
Для рекурсивного частичного просмотра я все еще не в состоянии преобразовать это в MVC3, а также в общую реализацию. Я нашел сообщение (forums.asp.net/t/1652809.aspx/1?treeview+with+mvc +3), в котором объясняется, как его преобразовать в MVC3, но я все еще не понимаю Что с этим делать. Я продолжаю получать ошибку для частичного представления: не может неявно преобразовать тип 'void' в тип 'object'
Как я уже говорил, я новичок в MVC3 и хотел бы узнать, какой метод лучше всего подходит для моего сценария и как его реализовать.
Ответы
Ответ 1
В случае, если кто-то задается вопросом, как я решил эту проблему, было использовать рекурсивное частичное представление. Проблема, с которой я столкнулся, заключалась в том, что у меня не было отношений, связанных со ссылкой, в SQL/EF (у меня просто было поле ParentID, которое не было связано с Первичным ключом.) Я также интегрировал jsTree, поскольку это много гладких функций, таких как поиск.
Как я уже сказал в комментарии выше, @Html.Action и @Html.Partial вместо @Html.RenderAction и @Html.RenderPartial.
Ответ 2
Посмотрите на edit/add/delete/ node перемещение шаблона TreeView моего инструментария Mvc Controls Toolkit здесь: http://mvccontrolstoolkit.codeplex.com/wikipage?title=TreeView
Ответ 3
$(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: контроллер { // //GET:/Chart/ ChartContext ctx = new ChartContext(); общедоступный индекс ActionResult() { return View(); } public ActionResult OrgChart() { return PartialView ( "_ OrgChart", ctx.Cards.ToList()); } public ActionResult ChartMember (int id, int? ParentId = null) { Card card = new Card(); если (id > 0) card = ctx.Cards.Find(id); еще card.ParentId = ParentId; return PartialView ( "_ ChartMember", карточка); } public ActionResult SaveMember (карточная карточка) { if (card.id == 0) ctx.Cards.Add(карта); еще ctx.Entry(card).State = System.Data.EntityState.Modified; ctx.SaveChanges(); return Json (true, JsonRequestBehavior.AllowGet); } }