2011-08-15 3 views
9

는 기본적으로, 나는 HTML 헬퍼 (@Html.MyEditor(m => m.Property) 같은)이이를 생산하려는 :Html.EditorFor() 및 기타 사용자 정의 Html 도우미 내부에서 어떻게 사용합니까?

<div class="editor-label"> 
    @html.LabelFor(m => m.Property) 
</div> 
<div class="editor-field"> 
    @html.EditorFor(m => m.Property) 
    @html.ValidationMessageFor(m => m.Property) 
</div> 

만 문제는 내가 Html.EditorFor() 또는 측면 내 자신의 헬퍼의 다른 확장 메서드에 액세스 할 수없는 것이다. 예 시도 :

@helper Edit(this System.Web.Mvc.HtmlHelper<Spartacus.ViewModels.NewTaskItemModel> html) 
{ 
    <div class="editor-label"> 
     @html.LabelFor(m => m.Property) 
    </div> 
    <div class="editor-field"> 
     @html.EditorFor(m => m.Property) 
     @html.ValidationMessageFor(m => m.Property) 
    </div> 
} 

내가 또한 확장 메서드 구문을 시도 : 위의 두 시도에서

public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression) 
{ 
    var sb = new StringBuilder(); 
    sb.AppendLine("<div class=\"editor-label\">"); 
    sb.AppendLine(html.LabelFor(expression)); 
    sb.AppendLine("</div>"); 
    sb.AppendLine("<div class=\"editor-field\">"); 
    sb.AppendLine(html.EditorFor(expression)); 
    sb.AppendLine(html.ValidationMessageFor(expression)); 
    sb.AppendLine("</div>"); 
    return sb.ToString(); 
} 

는 동시에, labelFor, EditorFor 및 ValidationMessageFor는 ("찾을 수 없습니다") 컴파일 오류가 던져.

누구든지이 작업을 수행 할 방법을 알고 있습니까? 미리 감사드립니다!

+3

어쩌면 나는 질문 뒤에 속임수를 얻지 못했지만, 두 번째 경우 (순수한 C#이므로 이가 맞습니까?) IMHO System.Web.Mvc.Html 네임 스페이스를 사용하는 네임 스페이스가 있으면이 이가 작동해야합니다. 확장 메서드는 다양한 정적 확장 클래스 (예 : EditorExtensions)에서이 네임 스페이스에 정의됩니다. –

+1

@Tz_ 그게 전부 야! 나는'System.Web.Mvc'를 가지고 있었지만'System.Web.Mvc.Html'을 가지고 있지 않았습니다. VS2010은 내가 필요로하는 네임 스페이스가 아니라는 것을 알지 못했습니다. 일반적으로 사용하는 문을 자동으로 수정 해 주므로 잘못된 것이 있습니다. 의견 대신 답변을 추가하려면 정답에 대한 크레딧을드립니다. – jrizzo

답변

7

네임 스페이스가 System.Web.Mvc.Html 네임 스페이스에 사용되는 경우 작동합니다. 확장 메서드는 다양한 정적 확장 클래스 (예 : EditorExtensions)에서이 네임 스페이스에 정의됩니다.

관련 문제