2010-07-09 3 views
2

Я обнаружил NHaml несколько дней назад, и это отличный проект.Отсутствующие методы расширения в HtmlHelper с использованием 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(); 

Я пытался добавить сборок и пространств имен в разделе Web.config в nhaml, но это ничего не меняет.

Я использую:

  • System.Web.Mvc 2,0
  • .NET Framework 3.5 SP1
  • Nhaml 1.5.0.2 из ствола мерзавца (и попробовал другие билды)

Конфигурация моего 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

Он выглядит например, у вас есть проблема с ссылкой на сборку.

Возможно, вы ссылаетесь на сборки MVC 1.0 вместо 2.0 сборок?

+0

Обе ссылки в проекте NHaml и в веб-проекте - System.Web.Mvc 2.0.0.0. Чтобы подтвердить, я добавил простой код в представлении:. % р = Html.GetType() ассамблею Выход «System.Web.Mvc, Version = 2.0.0.0, культура = нейтральной, PublicKeyToken = 31bf3856ad364e35 " – SandRock

+0

Удалите все сборки из папки \ \ BIN и повторите попытку. MVC вернет правильные сборки в эту папку, когда вы выполните сборку. Более старая сборка все еще может быть в этой папке, и она может каким-то образом ссылаться на нее. Ранее была аналогичная проблема с MVC 1.0 и другими сторонними сборками. –

+0

Сделал это. Нет сборки MVC 1.0 в любом месте (она даже не установлена ​​на моей машине). – SandRock

0

Насколько я могу видеть, новые помощники MVC не поддерживаются, на самом деле только ограниченное количество HtmlHelpers - это LinkExtensions. Как можно предположить, вы можете попытаться добавить LabelExtensions в настройку просмотра NHaml в файле NHaml.Web.Mvc/NHamlMvcViewEngine.cs (так как у вас есть источник) и проверить, работает ли это.

private void InitializeTemplateEngine() 
{ 

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

Я уже пробовал это с последним источником git. Думаю, я погружусь глубже в источник, чтобы узнать, как реализованы реализации LinkExtensions. – SandRock