2010-09-01 156 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擴展方法

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 2010-09-01 13:30:01

+0

感謝您的快速響應。我試過了,現在我有兩個不同的錯誤。我得到這個錯誤:「foreach語句不能對'Products_Ingredients'類型的變量進行操作,因爲'Products_Ingredients'不包含'GetEnumerator'的公共定義」 – user 2010-09-01 13:46:46

+0

此外,在視圖中我得到這個錯誤:「最好的重載方法匹配'HtmlHelperExtensions .Ingredients(Products_Ingredients)'有一些無效參數」 – user 2010-09-01 13:47:53

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 2010-09-01 14:02:37

+0

請參閱上文。它是一個IEnumerable。 – Nix 2010-09-01 14:51:47