2

私は数日前にNHamlを発見しましたが、それは素晴らしいプロジェクトです。

Html.LabelFor()Html.TextBoxFor( )などのMVC2Htmlヘルパーを使用しようとすると; ビューはコンパイルされません。

例:

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セクションにアセンブリと名前空間を追加しようとしましたが、何も変更されません。

私が使用している:

  • System.Web.Mvc 2.0
  • .NET Framework 3.5 SP1
  • gitトランクからのNhaml1.5.0.2(および他のビルドを試しました)

私のNHaml構成は次のとおりです。

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

3 に答える 3

1

アセンブリ参照に問題があるようです。

2.0アセンブリではなく、MVC 1.0アセンブリを参照している可能性がありますか?

于 2010-07-11T00:49:21.147 に答える
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 );

再構築して使用します:)

于 2010-07-18T14:49:29.777 に答える
0

新しいMVCヘルパーがサポートされていないことがわかる限り、実際には限られた量のHtmlHelperのみがLinkExtensionsです。大げさな推測として、ファイル内のNHamlビューエンジンのセットアップにLabelExtensionsを追加してNHaml.Web.Mvc/NHamlMvcViewEngine.cs(ソースがあるため)、それが機能するかどうかを確認することができます。

private void InitializeTemplateEngine()
{

 // snip
_templateEngine.Options.AddReference( typeof( LabelExtensions ).Assembly.Location ); // Line 50
}
于 2010-07-12T07:22:37.033 に答える