2011-11-16 191 views
1

好吧,我試圖實現Repeater擴展方法到HtmlHelper中,如Phil Haack的博客http://haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx 中所解釋的那樣。但是,當我嘗試在View中使用它時,編譯錯誤「System.Web.Mvc.HtmlHelper」不包含「Repeater」的定義。Asp.Net MVC HtmlHelper擴展方法不顯示

這裏是我的擴展類:

namespace MyAwesomeBlog.Helpers { 
public static class HtmlHelpers { 
    public static void Repeater<T>(this HtmlHelper html 
     , IEnumerable<T> items 
     , Action<T> render 
     , Action<T> renderAlt) { 

//執行無關 }); }

public static void Repeater<T>(this HtmlHelper html 
     , Action<T> render 
     , Action<T> renderAlt) { 

//實現無關 }); }

public static void Repeater<T>(this HtmlHelper html 
     , string viewDataKey 
     , Action<T> render 
     , Action<T> renderAlt) { 

//實現無關 }); }

public static void Repeater<T>(this HtmlHelper html 
             , IEnumerable<T> items 
             , string className 
             , string classNameAlt 
             , Action<T, string> render) { 

//實現無關 });

} 
} 

}

我已經包含在這我的web.config:

<add namespace="MyAwesomeBlog.Helpers"/> 

這是我用在我看來,擴展方法:

<% HtmlHelper.Repeater<Post>(Model, "post", "post-alt", (post, cssClassName) => { %> 
    <div class="<%=cssClassName %>"> 
     <h1><%= post.Title %></h1> 
     <p> 
     <%= post.Body %> 
     </p> 
    </div> 
<% }); %> 

儘管如此,編譯器給我在「.Repeater」下面的波浪線表示HtmlHelper沒有這樣的方法。

我錯過了什麼?

回答

3

關於我在我的其他答案的評論,我剛剛檢查,我幾乎可以肯定,這是你的問題。你不能在靜態類上使用擴展方法(或者添加靜態擴展方法),所以你需要一個HtmlHelper實例來調用Repeater。

+1

我剛剛弄明白了,當我看到你的答案完全正確時,我回過頭來回答自己的問題......結果我必須調用Html.Repeater,而不是HtmlHelper.Repeater。 –

3

您是否將此添加到Views文件夾或根web.config中的Web.Config? 它需要進入'Views/web.config'。

+0

確定它確實在根web.config。我將它移動到views/web.config,但遺憾的是這是徒勞無益的。我仍然在運行時遇到編譯錯誤。 –

+0

你真的得到YSOD還是隻是intellisense抱怨? 你編譯過這個項目嗎? – santiagoIT

+0

解決方案編譯並啓動。然後我得到YSOD,指向我的視圖代碼的<%HtmlHelper.Repeater (Model,「post」,「post-alt」,(post,cssClassName)=>「行,表示HtmlHelper不包含直放站的定義。 –

0

今天我遇到了這個問題,在我的情況下,關閉並重新打開html頁面似乎有竅門(顯然編譯該項目)。

+0

不...我甚至關閉並重新打開Visual Studio ...也無濟於事。 –

+1

我對剃刀語法更熟悉,但對於剃刀,有一個HtmlHelp對象(@Html)的實例,它具有自定義助手(一旦添加了配置等)。您正在調用HtmlHelper.Repeater,這表明它是HtmlHelper對象的靜態方法....您確定您有HtmlHelper的實例嗎? –

1

嘗試將其更改爲:

<% Html.Repeater<Post>(Model, "post", "post-alt", (post, cssClassName) => { %> 
    <div class="<%=cssClassName %>"> 
     <h1><%= post.Title %></h1> 
     <p> 
     <%= post.Body %> 
     </p> 
    </div> 
<% }); %> 

您查看HTML屬性是一個的HtmlHelper。

相關問題