2010-07-09 5 views
2

나는 NHaml을 며칠 전에 발견 했으므로 큰 프로젝트입니다. NHaml을 사용하는 HtmlHelper에서 누락 된 확장 메서드

내가 처럼 Html.LabelFor(), Html.TextBoxFor() MVC2 HTML을 헬퍼를 사용하려고

; 뷰는 컴파일되지 않습니다.

예 :

error CS1061: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'LabelFor' and no extension method 'LabelFor' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?) 
0185:   textWriter.Write("    "); 
0185:   textWriter.Write(Convert.ToString(Html.LabelFor(model => model.Username))); 
0187:   textWriter.WriteLine(); 

error CS1061: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'TextBoxFor' and no extension method 'TextBoxFor' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?) 
0194:   textWriter.Write("    "); 
0194:   textWriter.Write(Convert.ToString(Html.TextBoxFor(model => model.Username))); 
0196:   textWriter.WriteLine(); 

나는 nhaml의 web.config 섹션에 어셈블리 및 네임 스페이스를 추가하려고하지만 아무것도 변경되지 않습니다. (빌드 및 기타 시도) 자식 트렁크에서 Nhaml 1.5.0.2

  • System.Web.Mvc 2.0
  • .NET 프레임 워크 3.5 SP1
  • 을 :

    내가 사용하고 있습니다

    내 NHaml 구성 :

    <nhaml autoRecompile="true" templateCompiler="CSharp3" encodeHtml="false" useTabs="false" indentSize="2"> 
    
+0

표준 Html.Label 방법을 사용할 수 있습니까를? – Ahmad

+0

표준 방법이 효과적입니다. – SandRock

+0

Expression <> 형식의 인수를 사용하는 확장 메서드가 누락 된 유일한 메서드 인 것 같습니다. 이것은 단지 네임 스페이스가 누락 될 수 있습니까? 표준 뷰 엔진을 사용하는 표준 HtmlHelper가 일반적이라는 사실을 알았습니다. NHaml 하나가 아닙니다! 그래, 알았어. 몇 가지 테스트를 위해 이것을 밀어 드리겠습니다. 나는 스스로 대답 할 것입니다. 고마워. – SandRock

답변

1

문제는 뷰 클래스에 일반이 아닌 HtmlHelper가 포함되어 있다는 것입니다. 또는 일부 새로운 확장 메서드를 사용하려면 ViewData.Model의 형식이 필요합니다.

이 문제를 해결하려면 NHaml.Web.Mvc/NHamlMvcView.cs에서 속성 및 인스턴스를 변경하십시오.

//public HtmlHelper Html { get; protected set; } // line 42 
public HtmlHelper<TModel> Html { get; protected set; } 

//Html = new HtmlHelper(viewContext, this); // line 37 
Html = new HtmlHelper<TModel>(viewContext, this); 

재 구축 및 사용 :

1

어셈블리 참조 문제가있는 것 같습니다.

아마도 2.0 어셈블리 대신 MVC 1.0 어셈블리를 참조하게됩니까?

+0

NHaml 프로젝트와 웹 프로젝트의 두 참조는 System.Web.Mvc 2.0.0.0입니다. . 내가보기에 간단한 코드 추가 확인 : %, P = Html.GetType() 총회 를 출력이다 "System.Web.Mvc, 버전 = 2.0.0.0, 문화 = 중립, PublicKeyToken = 31bf3856ad364e35 " – SandRock

+0

'\ BIN'폴더에서 모든 어셈블리를 삭제하고 다시 시도하십시오. MVC는 빌드 할 때 올바른 어셈블리를 해당 폴더에 다시 넣습니다. 이전 어셈블리는 여전히 해당 폴더에있을 수 있으며, 어쨌든 참조 할 수 있습니다. 이전에 MVC 1.0 및 다른 타사 어셈블리와 비슷한 문제가있었습니다. –

+0

그랬습니까. MVC 1.0 어셈블리는 어디에도 없습니다 (내 컴퓨터에도 설치되지 않았습니다). – SandRock

0

새로운 MVC 도우미가 지원되지 않는다는 것을 알기까지 실제로 제한된 양의 HtmlHelpers 즉 LinkExtensions 만 있습니다. 야생 추측으로, NHaml.Web.Mvc/NHamlMvcViewEngine.cs 파일의 NHaml 뷰 엔진 설정에 LabelExtensions를 추가하려고 시도 할 수 있습니다 (소스가 있으므로). 그러면 작동하는지 확인하십시오.

private void InitializeTemplateEngine() 
{ 

// snip 
_templateEngine.Options.AddReference(typeof(LabelExtensions).Assembly.Location); // Line 50 
} 
+0

나는 이미 최신 자식 소스로 이것을 시도했다. LinkExtensions가 구현되는 방법을 찾기 위해 소스에 대해 깊이 파고들 것입니다. – SandRock