我已经建立了一个结构,根据给定的角色从数据库中检索返回菜单项。
现在,我需要创建一个递归方法来在控制器中呈现此HTML并将此HTML传递给视图。但我只是不知道如何在控制器中编写本机HTML。 有什么建议吗?
答案 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();
}