J'essaye de créer un contrôle basé sur un modèle avec Asp.Net MVC. Par le contrôle basé sur un modèle, je veux dire un contrôle qui accepte le balisage en entrée comme ceci:Comment puis-je créer un contrôle basé sur un modèle avec Asp.Net MVC?
<% Html.PanelWithHeader()
.HeaderTitle("My Header")
.Content(() =>
{ %>
<!-- ul used for no particular reason -->
<ul>
<li>A sample</li>
<li>A second item</li>
</ul>
<% }).Render(); %>
Note: Oui, ce qui est très similaire à how Telerik creates its MVC controls, j'aime la syntaxe.
Voici mon code PanelWithHeader:
// Extend the HtmlHelper
public static PanelWithHeaderControl PanelWithHeader(this HtmlHelper helper)
{
return new PanelWithHeaderControl();
}
public class PanelWithHeaderControl
{
private string headerTitle;
private Action getContentTemplateHandler;
public PanelWithHeaderControl HeaderTitle(string headerTitle)
{
this.headerTitle = headerTitle;
return this;
}
public PanelWithHeaderControl Content(Action getContentTemplateHandler)
{
this.getContentTemplateHandler = getContentTemplateHandler;
return this;
}
public void Render()
{
// display headerTitle as <div class="header">headerTitle</div>
getContentTemplateHandler();
}
}
Cette affiche le ul
, mais je ne sais pas comment afficher un code personnalisé au sein de ma méthode de rendu.
J'ai essayé d'utiliser le HtmlHelper sans succès. J'ai également essayé de remplacer la méthode ToString pour pouvoir utiliser la syntaxe <%=Html.PanelWithHeader()...
, mais j'ai continué à avoir des erreurs de syntaxe.
Comment est-ce que je peux faire ceci?
Cela fonctionnerait, mais son laid et demande à l'utilisateur de se rappeler d'appeler les deux. – mbillard