代码之家  ›  专栏  ›  技术社区  ›  diego

将HTML从控制器传递到视图

  •  1
  • diego  · 技术社区  · 15 年前

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

    有什么建议吗?

    4 回复  |  直到 12 年前
        1
  •  7
  •   Rex M    15 年前

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

        2
  •  4
  •   TJB    15 年前

    比你想象的要容易:

    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>
    

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

        3
  •  2
  •   JRoppert    15 年前

    一定地

        4
  •  2
  •   Beep beep    15 年前

    您可以使用HTML助手来创建HTML。例如,我们有一个非常复杂的菜单系统,所以我们创建了一个HtmlHelper扩展。这里有一个简单的html扩展(我使用标记生成器使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();
      }