我几天前发现了NHaml,这是一个很棒的项目。
当我尝试使用MVC2 Html助手时,例如 Html.LabelFor(), Html.TextBoxFor();意见不会编译。
示例:
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配置是:
<nhaml autoRecompile="true" templateCompiler="CSharp3" encodeHtml="false" useTabs="false" indentSize="2">
答案 0 :(得分:1)
看起来你有一个程序集引用问题。
您可能正在引用MVC 1.0程序集而不是2.0程序集?
答案 1 :(得分: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 );
重建和使用:)
答案 2 :(得分:0)
据我所知,新的MVC助手不受支持,实际上只有有限数量的HtmlHelper即LinkExtensions。作为一个疯狂的猜测,您可以尝试将LabelExtensions添加到NHaml.Web.Mvc/NHamlMvcViewEngine.cs
文件中的NHaml视图引擎的设置中(因为您确实有源代码)并检查它是否有效。
private void InitializeTemplateEngine()
{
// snip
_templateEngine.Options.AddReference( typeof( LabelExtensions ).Assembly.Location ); // Line 50
}