2010-09-01 11 views
0

Je suis assez nouveau pour MVC et je viens de lire un article sur les helpers. Maintenant, j'ai ce code sur la vue:Custom Helper utilisant le modèle

<div class="display-label">Ingredients: 
     <% foreach (var e in Model.Products_Ingredients) 
     {%> 
      <%: e.Ingredient.Name%><br /> 
      <%: e.Percentage%> 
       <%if (e.Percentage != null) 
       {%> 
        % 
       <%}%> 
       <br /> 
     <%}%> 
    </div> 

Comment puis-je continuer et créer une aide qui remplacerait ce code avec quelque chose de plus simple comme:

<div class="display-label">Ingredients: <%: MyHelpers.Ingredients %> </div> 

Merci!

Répondre

1

vous aurez besoin de faire une méthode d'extension HtmlHelper

public namespace User.Extensions 

    public static HtmlHelperExtensions 
    { 
     public static string Ingredients(this HtmlHelper, Product_Ingredients productIngredients) 
     { 
      string result = string.Empty; 
      // loop through your ingredients and build your result, could use TagBuilder, too 
      return result; 
     } 
    } 
} 

Ensuite, vous pouvez appeler <%=Html.Ingredients(Model.Products_Ingredients) %>

assurez-vous d'ajouter cette référence d'assemblage à la page

<%@ Import Namespace=User.Extensions" %> 

ou à votre Web.Config pour que toutes les pages aient accès

<pages> 
    <namespaces> 
     <add namespace="User.Extensions" /> 
+0

Exactement la même chose ... me battre pour elle. La seule chose que je n'ai pas utilisé une méthode d'extension, je viens d'utiliser une classe d'aide et inclus. – Nix

+0

Merci pour la réponse rapide. J'ai essayé cela et maintenant j'ai 2 erreurs différentes. Lorsque j'ajoute la boucle: "foreach (var e dans productIngredients)" J'obtiens cette erreur: "foreach statement ne peut pas fonctionner sur des variables de type 'Products_Ingredients' car 'Products_Ingredients' ne contient pas de définition publique pour 'GetEnumerator'" – user

+0

En outre, dans la vue j'obtiens cette erreur: "La meilleure méthode surchargée pour 'HtmlHelperExtensions .Ingredients (Products_Ingredients)' a quelques arguments invalides" – user

0
public class MyHelpers 
    { 
    public static string Ingredients(IEnumerable<Products_Ingredients> pi) 
    { 
     //html code as string 
     // <%: pi.Ingredient.Name%><br /> 
     // <%: pi.Percentage%> 
     //  <%if (pi.Percentage != null) 
     //  {%> 
     //   % 
     //  <%}%> 
     //  <br /> 
     return htmlCode; 
    } 
    } 

Dans votre page ajouter

<%@ Import Namespace=namespace.MyHelpers" %> 

<div class="display-label">Ingredients: <%: MyHelpers.Ingredients(Model.Products_Ingredients) %> </div> 
+0

mêmes erreurs que ci-dessus – user

+0

Voir ci-dessus. C'est un IEnumerable. – Nix