2010-05-24 7 views
4

Y at-il un moyen de faire aide dans Asp.Net MVC pour envelopper autre html comme ceci:Asp.Net MVC contrôles personnalisés - conteneurs

<div class="lightGreyBar_left"> 
    <div class="lightGreyBar_right"> 

     <!--Content--> 
     <h3> 
      Profiles</h3> 
     <div class="divOption"> 
      <%= Html.ActionLinkWithImage("Create new", "add.png", Keys.Actions.CreateProfile, "add")%> 
     </div> 
     <!--Content--> 

    </div> 
</div> 

Afin que consolateur rendre contenant divs et le contenu qui est passé à méthode auxiliaire en tant que paramètre.

Répondre

4

Jetez un coup d'œil sur les méthodes d'aide aux formulaires. Ils fournissent la syntaxe comme ceci:

<% using (Html.BeginForm()) { %> 
    <p>Form contents go here.</p> 
<% } %> 

Le modèle pour la mise en œuvre de ce genre d'aides HTML est un peu plus impliqué que l'habituel « retour juste une chaîne HTML » aides de type. Fondamentalement, votre méthode d'assistance va Response.Write les balises d'ouverture lorsqu'il est appelé et retourner un objet personnalisé qui implémente IDisposable. Lorsque la valeur de retour est éliminée, il faut Response.Write la ou les étiquettes de fermeture.

Voici un exemple de travail:

public static MyContainer WrapThis(this HtmlHelper html) 
{ 
    html.ViewContext.HttpContext.Response.Write("<div><div>"); 
    return new MyContainer(html.ViewContext.HttpContext.Response); 
} 

public class MyContainer : IDisposable 
{ 
    readonly HttpResponseBase _httpResponse; 
    bool _disposed; 

    public MyContainer(HttpResponseBase httpResponse) 
    { 
     _httpResponse = httpResponse; 
    } 

    public void Dispose() 
    { 
     if (!_disposed) 
     { 
      _disposed = true; 
      _httpResponse.Write("</div></div>"); 
     } 

     GC.SuppressFinalize(this); 
    } 
} 

Cela vous permettra de réécrire votre point de vue à ceci:

<% using (Html.WrapThis()) { %> 
    <h3>Profiles</h3> 
    <div class="divOption"> 
     <%= Html.ActionLinkWithImage("Create new", "add.png", Keys.Actions.CreateProfile, "add")%> 
    </div> 
<% } %> 
+0

« WrapThis » doit être dans une classe statique .. Ce n'est pas évident dans cet exemple. – LarryBud

+0

Après avoir regardé cela, c'est incorrect. Cela va écrire le contenu en haut de la page. Cela devrait être helper.ViewContext.Writer.Write (...). WrapThis doit également être dans une classe statique, et la méthode MyContainer doit avoir HtmlHelper comme argument, et non comme HttpResponseBase. – LarryBud

Questions connexes