2012-12-27 2 views
2

안녕하세요, MVC 부분 페이지 내에서 선언적 HTML 도우미 메서드를 만들려고합니다. 모든 것이 제대로 작동합니다. 그러나 내장 된 HTML 확장 메서드를 사용하려면 확장 메서드가 없다는 것을 알았습니다. 또한 내보기의 webconfig 파일을 확인하여 System.Web.Mvc.Html 네임 스페이스를 추가했습니다. 모든 것이 정상이지만, 왜 작동하지 않는지는 알 수 없습니다.Html MVC 부분 페이지에서 확장 메서드를 사용할 수 없습니다.

조언이 도움이 될 것입니다.

편집는 :

@using WebVoter.ViewModel 
@using System.Web.Mvc.Html 

@helper GetVoteList(IList<VoteQuestionViewModel> voteQuestionList) 
{ 

    <div class="head-panel"> 
     @*For example ActionLink is not accessible here*@ 
     @Html.ActionLink(....); 

    </div> 
} 
+0

코드를 보여줄 수 있습니까? –

+0

using 문을 추가 했습니까? 부분 클래스와 마찬가지로 부분 뷰에 있어야합니다. – BlueChippy

+0

보기에서 명시 적으로 사용해 보시겠습니까? – tschmit007

답변

2

면도기 내부 도움말 HtmlHelper에 대한 참조가 없습니다. 당신은 호출 코드에서 매개 변수로 전달해야합니다

@helper GetVoteList(HtmlHelper html, IList<VoteQuestionViewModel> voteQuestionList) 
{ 
    <div class="head-panel"> 
     @html.ActionLink(....) 
    </div> 
} 

당신은 몇 가지보기에서이 도우미를 호출 할 때 참조 전달해야

@GetVoteList(Html, ...) 
개인적으로

난 항상 선호 한을 인라인 Razor 도우미를 사용하는 대신 HtmlHelper 클래스에 확장 메서드를 작성합니다. 그런 다음 표준 도우미로 사용됩니다.

@Html.GetVoteList(...) 

장점은 더 이상 Razor에 연결되어 있지 않다는 것입니다. 확장 메서드는 뷰 엔진에 독립적이며 다른 뷰 엔진으로 전환하는 것이 C# 코드이므로 덜 고통 스럽습니다. 또 다른 이점은 단위 테스트를 할 수 있다는 것입니다.

+0

+1 : 대린 감사합니다.하지만 partial에 HtmlHelper에 대한 참조가없는 이유를 설명해 주시겠습니까? – saber

+2

부분적으로 HtmlHelper에 대한 참조가 없다는 말은 결코하지 않았습니다. 부분 및보기에는 HtmlHelper에 대한 참조가 있습니다. 내가 말한 것은 면도기 인라인 도우미가 HtmlHelper에 대한 참조를 가지고 있지 않다는 것입니다. 그 이유는 내게 알려지지 않았기 때문에 디자이너에게 MVC 프레임 워크를 물어봐야 할 것이다. 알다시피,'Html'은 ViewPage의 속성이지만 Razor 인라인 헬퍼는 정적 인 함수로 컴파일되거나 포함 된 페이지에 대한 참조를 더 이상 가지지 않기 때문입니다. –

+0

: D 대린 감사합니다. – saber

0

뷰 폴더 아래의 Web.config이 있습니다 : 여기 내 코드입니다. 이 구성도 수정할 수 있습니까?