Лучший способ генерировать HTML в MVC4

0

Прямо сейчас у меня в проекте Mvc4 есть класс .cs именем HTMLcreator в папке App_Code, который делает html для отображения в моих представлениях.

Это, я слышал, не самый лучший способ, и он утомительно обновляет элементы html в файле .cs.

Каким будет лучший способ создания динамического html для представления?


HTMLcreator.cs:

public static string methodOne()
    {
        StringBuilder result = new StringBuilder();
        List<Subjects> subjects = Subjects.GetAll(); // Gets a some objects

        foreach (Subjects s in subjects)
        {
            result.Append("<p>" + s.name + "</p>");

            if(s.hasChild)
            {
                result.Append(methodTwo(Subjects.GetChild(s)));
            }
        }
        return Convert.ToString(result);
    }

public static string methodTwo(Subjects s)
    {
        StringBuilder result = new StringBuilder();

        result.Append("<p>" + s.name + "</p>");

        if(s.hasChild)
        {
            result.Append(methodTwo(Subjects.GetChild(s)));
        }
        return Convert.ToString(result);
    }

Вид вызывает метод с помощью метода @Html.Raw.

  • 2
    Как насчет использования представлений так, как они были задуманы? Представления позволяют создавать леса веб-страницы и дают возможность вводить в них значения. Похоже, вы используете подход, заключающийся в создании всей веб-страницы и внедрении этого. В ASP.NET MVC 4 они даже дают хороший синтаксис Razor для выполнения этого. Зачем изобретать и без того неплохое колесо?
  • 1
    Понятия не имею, о чем ты говоришь. Вы не используете HTML просмотров?
Показать ещё 8 комментариев
Теги:
asp.net-mvc-4

1 ответ

2
Лучший ответ

Что вам действительно нужно здесь, это helper:

@helper methodOne(Subjects subjects)
{
    foreach (var subject in subjects)
    {
        <p>@subject.name</p>

        if (subject.hasChild)
            @methodOne(Subjects.GetChild(subject))
    }
}

Затем используйте его где-нибудь в вашем представлении:

<div>
      @methodOne(subjects)
</div>

Тем не менее, если вы настаиваете на том, чтобы генерировать HTML самостоятельно, лучше используйте System.Web.Mvc.TagBuilder:

Содержит классы и свойства, которые используются для создания элементов HTML. Этот класс используется для написания помощников, таких как те, которые содержатся в пространстве имен System.Web.Helpers.

См. MSDN.

  • 1
    Если вам действительно нужно генерировать HTML напрямую, это действительно лучший путь. Я не думаю, что у ОП есть такая необходимость.
  • 1
    ОП использует StringBuilder для «генерации HTML напрямую».
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню