Использование функций asp.net mvc 2 с движком Spark View - PullRequest
9 голосов
/ 27 ноября 2009

Я работаю с проектом ASP.NET MVC, который изначально был запущен из проекта CodeBetter.Canvas - и пытаюсь перейти на ASP.NET MVC 2. Я успешно обновил свой проект, используя Средство обновления Eilon перенесено в VS2010 (хотя еще не в .NET 4).

Проблема, с которой я сталкиваюсь в настоящее время, возникает только при использовании движка искрового обзора. Вот соответствующий фрагмент кода в моем View.spark (строго типизированный):

${Html.EditorFor(e => e)}

Тот же бит кода прекрасно работает , если я использую представление ASPX:

<%= Html.EditorFor(e => e) %>

Основным моментом здесь является то, что «EditorFor» является новым в ASP.NET MVC 2, и в моем проекте я могу использовать этого помощника в представлении ASPX, но не в представлении Spark.

Я пытался обновить Spark, чтобы использовать MVC 2 (а также MvcContrib и Ninject), думая, что, возможно, это был один из тех, кто был в шоке - но пока не повезло - я все еще видя такое же поведение.

Вот полное сообщение об ошибке, которое выдается из класса Spark BatchCompiler.

Ошибка компиляции динамического представления. (0,0): предупреждение CS1701: предполагается ссылка на сборку 'System.Web.Mvc, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' соответствует System.Web.Mvc, Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 ', вы может потребоваться предоставить политику выполнения C: \ Inetpub \ Wwwroot [MyProject] \ CodeBetter.Canvas.Web \ Просмотров [MyEntity] \ View.spark (9,16): ошибка CS1061: «System.Web.Mvc.HtmlHelper» не содержат определение для «EditorFor» и нет метода расширения «EditorFor» принимая первый аргумент типа 'System.Web.Mvc.HtmlHelper' может быть найдено (вы пропустили использование директива или ссылка на сборку?)

Вот код, связанный с Spark, в моем Global.asax:

var settings = new SparkSettings()
.AddNamespace("System")
.AddNamespace("System.Collections.Generic")
.AddNamespace("System.Web.Mvc")
.AddNamespace("System.Web.Mvc.Html")
.AddNamespace("MvcContrib.FluentHtml")
.AddNamespace("CodeBetter.Canvas")
.AddNamespace("CodeBetter.Canvas.Web")
.SetPageBaseType("ApplicationViewPage")
.SetAutomaticEncoding(true);

#if DEBUG
    settings.SetDebug(true);
#endif

var viewFactory = new SparkViewFactory(settings);
ViewEngines.Engines.Add(viewFactory);

Кроме того, я ссылаюсь на System.Web.Mvc.Html в моем представлении искры, как упоминалось в другом ответе SO .

<use namespace="System.Web.Mvc.Html" />

Ответы [ 6 ]

9 голосов
/ 06 декабря 2009

Основная проблема заключается в том, что на сборку версии 1.0.0 все еще ссылаются где-то в проекте.

Используя рефлектор для проверки зависимостей каждой сборки, я обнаружил (если вы начинаете с проекта CodeBetter.Canvas) есть три зависимых проекта, которые необходимо обновить, чтобы использовать 2.0.0 версия system.web.mvc.dll

  1. Свеча . Загрузите последнюю версию искры от Teamcity и использовать spark.web.mvc2.dll (какие ссылки system.web.mvc.dll 2.0.0) Ссылка на подробные инструкции.

  2. MVCContrib . Загрузите последнюю версию MVCContrib ( загрузить релиз , загрузить источник ), который ссылается на system.web.mvc.dll 2.0.0.

  3. Ninject . Скачать последнюю версию ninject и перекомпилировать решение VS после обновления ссылка на 2.0.0 версия system.web.mvc.dll

Теперь замените эти сборки зависимостей в вашем проекте и при необходимости обновите ссылки на проекты. Все должно быть хорошо.

2 голосов
/ 02 декабря 2009

Я недавно преобразовал свой искровой проект в asp.net mvc 2. Я не вижу в том, что вы написали, что вы переключились с использования Spark.Web.Mvc на Spark.Web.Mvc2.

Для ясности, Spark.Web.Mvc2 - это проект, который необходимо перекомпилировать с новой сборкой System.Web.Mvc.

У меня были проблемы с intellisense, пока я не удалил все ссылки на сборки и пространства имен из web.config, поместил их в файл global.spark и добавил атрибут pageBaseType = "Spark.Web.Mvc2.SparkView" в Spark- > Узел страниц в web.config.

Надеюсь, что это поможет.

1 голос
/ 06 декабря 2010

Вот шаги, которые я предпринял для решения проблемы с новым проектом MVC 2 и Spark 1.1:

  1. Компиляция с MVC 2.0 - я дважды проверил ссылки, чтобы убедиться, что я связывался с MVC 2, а не с MVC 1. Поскольку это был новый проект, это не было проблемой.

  2. Добавлен System.Web.Mvc.Html - я добавил System.Web.Mvc.Html в конфигурацию Spark, чтобы убедиться, что пространство имен добавлено во все представления.

    В Global.asax.cs Application_Start

     var settings = new SparkSettings()
         .SetDebug(true)
         .SetAutomaticEncoding(true)
         .AddAssembly("Web")
         .AddNamespace("Web.Model")
         .AddNamespace("System.Collections.Generic")
         .AddNamespace("System.Linq")
         .AddNamespace("System.Web.Mvc")
         .AddNamespace("System.Web.Mvc.Html");
    

    Это также можно сделать в веб-конфигурации в блоке Spark View Engine.

  3. Добавьте типизированную модель - Убедитесь, что вы набрали модель Spark View. В aspx это делается с помощью Inherits в объявлении страницы, например:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
    Inherits="System.Web.Mvc.ViewPage<MyModelType>" %>
    

    в Spark:

    <viewdata model="MyModelType" />
    
1 голос
/ 01 декабря 2009

Попробуйте указать ссылку System.Web.Mvc в файле web.config вместо файла Global.ascx.cs, чтобы можно было указать конкретную версию:

<spark>
  <compilation debug="true" defaultLanguage="CSharp">
     <assemblies>
        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
     </assemblies>
 </compilation>
</spark>

Это должно вообще запретить SPARK, если откуда-то загружается неправильная версия сборки MVC.

Если сборка MVC 1.0 находится в GAC, вы можете очистить и перезагрузить ее следующим образом:

(из командной строки Visual Studio)

ngen /delete System.Web.Mvc
ngen /delete System.Web.Abstractions
ngen update

Надеюсь, это поможет,

Джефф Френч

1 голос
/ 28 ноября 2009

Когда вы загружали новейшие исходники Spark, вы перестраивали его, используя сборки MVC 2? Вы заменили ссылки в проекте Spark?

0 голосов
/ 23 сентября 2010

Я перепробовал много вещей, упомянутых выше, но просто не смог получить зависимую dll, которую использовали мои представления (а также ссылались на MVC 1.0.0.0) для использования MVC 2.0.0.0, так что вот что исправило для меня. ..

Я скачал код Spark и добавил следующую строку в файл BatchCompiler.cs в методе компиляции:

compilerParameters.CompilerOptions = "/nowarn:1701";
...