MVC 3 RTM 프로젝트에 대한 App_Code 폴더에 Razor 선언적 도우미를 만들려고했습니다.
내가 만난 문제는 ActionLink와 같은 MVC HtmlHelper 확장을 사용할 수 없다는 것입니다. 이 컴파일 된 헬퍼에서 파생 때문이다 System.Web.WebPages.HelperPage
, 그리고 그것이 노출하지만 Html
속성을 해당 유형의 System.Web.WebPages.HtmlHelper
것이 아니라 System.Web.Mvc.HtmlHelper
.
내가받은 오류의 예는 다음과 같습니다.
'System.Web.Mvc.HtmlHelper'에 'ActionLink'에 대한 정의가 포함되어 있지 않으며 'System.Web.Mvc.HtmlHelper'유형의 첫 번째 인수를 허용하는 확장 메서드 'ActionLink'를 찾을 수 없습니다 (using 지시문이 누락 되었습니까? 또는 어셈블리 참조?)
내 유일한 해결책은 나만의 HelperPage를 만들고 Html 속성을 재정의하는 것입니다.
using System.Web.WebPages;
public class HelperPage : System.Web.WebPages.HelperPage
{
// Workaround - exposes the MVC HtmlHelper instead of the normal helper
public static new HtmlHelper Html
{
get { return ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html; }
}
}
그런 다음 모든 도우미의 맨 위에 다음을 작성해야합니다.
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
MVC 3에서 이렇게 힘들다는 뜻인가요, 아니면 제가 뭔가 잘못하고 있나요?