Я решил эту проблему, запустив bitvise в режиме совместимости с windows 7
Создайте свой собственный метод расширения HtmlHelper следующим образом:
namespace System.Web.Mvc
{
public static class HtmlHelperExtensions
{
public static string CategoryTree(this HtmlHelper html, IEnumerable<Category> categories)
{
string htmlOutput = string.Empty;
if (categories.Count() > 0)
{
htmlOutput += "<ul>";
foreach (Category category in Categories)
{
htmlOutput += "<li>";
htmlOutput += category.Name;
htmlOutput += html.CategoryTree(category.Categories);
htmlOutput += "</li>";
}
htmlOutput += "</ul>";
}
return htmlOutput;
}
}
}
Забавно, что вы должны спросить, потому что я действительно создал один из них только вчера.
Вы можете легко сделать это, поместив каждый список
в
PartialView
, и для каждого нового списка, который вам нужно запустить, просто позвоните Html.RenderPartial ("myPartialName");
.
Таким образом, Категория
PartialView может выглядеть следующим образом:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Category>>" %>
<% foreach(Category cat in ViewData.Model) { %>
<li><p><%= cat.name %></p>
<% if (cat.categories.Count > 0) {
Html.RenderPartial("Category", cat.Categories);
} %></li>
<% } %>
В вашем представлении вы просто отправляете «корневую» коллекцию как модель для частичного представления:
<% Html.RenderPartial("Category", ViewData.Model) %>
РЕДАКТИРОВАТЬ:
Html.RenderPartial ()
- конечно, категория должна быть передана в качестве модели. Вы можете повторно использовать части html с помощью ламбд
Пример
public class Category
{
public int id;
public string name;
public IEnumerable categories;
}
<%
Action<IEnumerable<Category>> categoriesMacros = null;
categoriesMacros = categories => { %>
<ul>
<% foreach(var c in categories) { %>
<li> <%= Html.Encode(c.name)%> </li>
<% if (c.categories != null && c.categories.Count() > 0) categoriesMacros(c.categories); %>
<% } %>
</ul>
<% }; %>
<% var categpries = (IEnumerable<Category>)ViewData["categories"]; %>
<% categoriesMacros(categpries); %>