2010-09-01 2 views
0

Я довольно новичок в MVC и просто прочитал статью о помощниках. Теперь у меня есть этот код на Вид:Пользовательский помощник с использованием модели

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

Как я могу идти дальше и создать помощника, который заменит этот код с чем-то простым, как:

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

Спасибо!

ответ

1

вам нужно сделать метод HtmlHelper Extension

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; 
     } 
    } 
} 

Тогда вы можете позвонить <%=Html.Ingredients(Model.Products_Ingredients) %>

убедитесь, что вы добавить ссылку на сборку на страницу

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

или на Web.Config, поэтому все страницы имеют доступ

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

Точно такой же ... бить меня к нему. Единственное, что я не использовал метод расширения, я просто использовал вспомогательный класс и включил его. – Nix

+0

Спасибо за быстрый ответ. Я пробовал это, и теперь у меня есть две разные ошибки. Когда я добавляю цикл: «foreach (var e in productIngredients)« Я получаю эту ошибку: «оператор foreach не может работать с переменными типа« Products_Ingredients », потому что« Products_Ingredients »не содержит общедоступного определения для« GetEnumerator »» – user

+0

Кроме того, в представлении я получаю эту ошибку: «Наилучшее перегруженное соответствие метода для« HtmlHelperExtensions .Инградиенты (Products_Ingredients) »имеют некоторые недопустимые аргументы» – 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; 
    } 
    } 

В вашей странице добавьте

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

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

те же ошибки, что и выше – user

+0

См. Выше. Его IEnumerable. – Nix

Смежные вопросы