与えられた役割に基づいて、データベースから検索してメニュー項目を返す構造を作った。コントローラからビューにHTMLを渡す
は今、私はコントローラで、このHTMLをレンダリングして表示するには、このHTMLを渡すための再帰的なメソッドを作成する必要があります。しかし、私はちょうどコントローラにネイティブHTMLを書く方法を知らない。 提案がありますか?
与えられた役割に基づいて、データベースから検索してメニュー項目を返す構造を作った。コントローラからビューにHTMLを渡す
は今、私はコントローラで、このHTMLをレンダリングして表示するには、このHTMLを渡すための再帰的なメソッドを作成する必要があります。しかし、私はちょうどコントローラにネイティブHTMLを書く方法を知らない。 提案がありますか?
コントローラーはHTMLをまったく処理しないでください。これがMVCのビューです。コントローラはモデルからデータ構造を渡す必要があり、ビューはそのデータ構造をHTMLとしてレンダリングする必要があります。
コントローラでHTMLをレンダリングするためのMVC(またはあなたがやっていること)のアイデアではありません。ビューでHTMLを処理する必要があります。別のUI(Windowsアプリケーションなど)を提供する場合はどうなりますか? HTMLはWinAppにはあまり適していません。
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();
}
あなたが思っているより簡単:
コントローラー:
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>
あなたは多くを作成する必要がある場合、あなたは一般的なマークアップをカプセル化する部分ビュー/ユーザーコントロールを使用することができます。