将HTML从控制器传递到视图

时间:2009-05-29 00:12:45

标签: html asp.net-mvc

我已经建立了一个结构,根据给定的角色从数据库中检索返回菜单项。

现在,我需要创建一个递归方法来在控制器中呈现此HTML并将此HTML传递给视图。但我只是不知道如何在控制器中编写本机HTML。 有什么建议吗?

4 个答案:

答案 0 :(得分:7)

控制器根本不应处理任何HTML。这就是MVC中的观点。您的控制器应该从模型传递数据结构,并且视图应该将该数据结构呈现为HTML。

答案 1 :(得分:4)

比你想象的更容易:

控制器:

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

查看:

<%= ViewData["html"] %>

我同意这不是最好的方法。我建议你在视图中编写html标记,然后替换模型中的值。

e.g。

控制器:

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

查看:

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

如果必须创建多个,可以使用部分视图/用户控件来封装公共标记。

答案 2 :(得分:2)

肯定不是MVC(或者你正在做的任何事情)在Controller中呈现HTML的想法。必须在视图中处理HTML。如果您想提供替代UI(例如Windows应用程序),该怎么办? HTML并不适合WinApp。

答案 3 :(得分:2)

您可以使用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();
  }