2011-11-16 2 views
1

좋아, Phil Haack의 블로그에서 설명한대로 HtmlHelper에 대한 Repeater 확장 메서드를 구현하려고합니다. http://haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx 그러나 내보기에서 사용하려고하면 컴파일 오류 '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) { 

// 구현 무관 }); 이것은 내보기에서 확장 메서드 내 사용하는 것입니다

<add namespace="MyAwesomeBlog.Helpers"/> 

: :이 내있는 Web.Config 포함했다

} 
} 

} 여전히

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

을, 컴파일러는 ".Repeater"아래에 HtmlHelper에 그러한 메소드가 없다는 것을 알리는 구불 구불 한 라인을 제공합니다.

내가 무엇을 놓쳤는가?

답변

3

내 다른 대답에 대한 내 의견에 관해서는 방금 확인한 결과 귀하의 문제라고 확신합니다. 정적 클래스에는 확장 메서드를 추가하거나 정적 확장 메서드를 추가 할 수 없으므로 Repeater를 호출하려면 HtmlHelper의 인스턴스가 필요합니다.

+1

나는 당신의 대답이 정확히 맞았다는 것을 알았을 때 나는 그것을 알아 냈고 내 자신의 질문에 답하기 위해 다시오고있었습니다 ... 그것은 HtmlHelper가 아니라 Html.Repeater를 호출해야한다는 것이 드러났습니다. Repeater. –

3

Views 폴더 또는 root web.config의 Web.Config에 추가 했습니까? 'Views/web.config'에 들어가야합니다.

+0

사실 그것은 루트 web.config에있었습니다. 나는 그것을 views/web.config로 옮겼지만, 슬프게도 이것은 아무 소용이 없다. 런타임에 여전히 컴파일 오류가 발생합니다. –

+0

당신은 실제로 YSOD를 얻나요, 아니면 intellisense가 불평입니까? 프로젝트를 컴파일 했습니까? – santiagoIT

+0

솔루션이 컴파일되고 실행됩니다. 그런 다음 YSOD를 가져 와서 <% HtmlHelper.Repeater (모델, "post", "post-alt", (post, cssClassName) => "HtmlHelper에는 Repeater에 대한 정의. –

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을 속성은 Html 헬퍼입니다.

관련 문제