Передайте HTML из контроллера для просмотра - PullRequest
1 голос
/ 29 мая 2009

Я создал структуру для извлечения из базы данных на основе заданной роли для возврата пунктов меню.

Теперь мне нужно создать рекурсивный метод для визуализации этого HTML-кода в контроллере и передачи этого HTML-кода для просмотра. Но я просто не знаю, как написать собственный HTML в контроллере. Есть предложения?

Ответы [ 4 ]

7 голосов
/ 29 мая 2009

Контроллер вообще не должен обрабатывать HTML. Вот для чего нужен взгляд в MVC. Ваш контроллер должен передать структуру данных из модели, а представление должно отобразить эту структуру данных как HTML.

4 голосов
/ 03 сентября 2009

Проще, чем вы думаете:

Контроллер:

ViewData["html"] = @"<a href='http://www.stackoverflow.com'>Stack Overflow</a>";

Вид:

<%= ViewData["html"] %>

Я согласен, что это не лучший метод. Я бы посоветовал вам написать html-разметку в вашем представлении и вместо этого подставить значения из вашей модели.

, например

Контроллер:

ViewData["Title"] = "Stack Overflow";
ViewData["Url"] = @"http://www.stackoverflow.com";

Вид:

<a href="<%=Html.Encode( ViewData["Url"] )%>">
     <%=Html.Encode( ViewData["Title"] )%></a>

Если вам нужно создать множество, вы можете использовать частичное представление / пользовательский элемент управления для инкапсуляции общей разметки.

2 голосов
/ 03 сентября 2009

Вы можете использовать помощник HTML для создания HTML. Например, у нас очень сложная система Menu, поэтому мы создаем расширение HtmlHelper. Вот простое расширение HTML (я использую TagBuilders, чтобы сделать HTML проще ... очень удобно, когда у вас много вложенных тегов).

  public static String MyNewExtension(this HtmlHelper html, String extraVariable)
  {
        if (html == null)
        {
            throw new ArgumentNullException("html");
        }

        TagBuilder h1Tag = newTagBuilder("h1");
        h1Tag.InnerHtml = extraVariable;
        return h1Tag.ToString();
  }
2 голосов
/ 29 мая 2009

Это определенно не идея MVC (или что бы вы ни делали) для рендеринга HTML в контроллере. HTML должен быть обработан в представлении. Что если вы хотите предоставить альтернативный пользовательский интерфейс (например, приложение Windows)? HTML не очень подходит для WinApp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...