Как заставить конструкторы ввода (MVC Contrib) работать с Spark View Engine?

Сегодня я потратил добрых три часа, пытаясь преобразовать проект MvcContrib.Samples.InputBuilders, включенный в MVC Contrib чтобы заставить его работать с Spark View Engine, но пока не удалось этого сделать.

Кто-нибудь знает, почему эти двое просто не ладят?

Внесенные мной изменения

InputForm.spark:

<viewdata model="SampleInput" />
!{Html.InputForm()}

Global.asax.cs:

...
protected void Application_Start() {
    RegisterRoutes(RouteTable.Routes);
    InputBuilder.BootStrap();
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new SparkViewFactory());
}

Web.config:

...
<spark>
    <compilation debug="true"/>
    <pages automaticEncoding="true">
        <namespaces>
            <add namespace="System"/>
            <add namespace="System.Collections.Generic"/>
            <add namespace="System.Linq"/>
            <add namespace="System.Web.Mvc"/>
            <add namespace="System.Web.Mvc.Ajax"/>
            <add namespace="System.Web.Mvc.Html"/>
            <add namespace="System.Web.Routing"/>
            <add namespace="MvcContrib.UI.InputBuilder"/>
            <add namespace="MvcContrib.UI.InputBuilder.Views"/>
            <add namespace="Web.Models"/>
        </namespaces>
    </pages>
</spark>

(Я скопировал последние три пространства имен из примера проекта.)

Я получаю ошибки

В зависимости от порядка, в котором я устанавливаю Spark / InputBuilder в Global.asax.cs, я получаю два разных исключения.

Если я сначала настрою InputBuilder, затем Spark (код показан выше):

ошибка CS1061: «System.Web.Mvc.HtmlHelper» не содержит определения для «InputForm», и не может быть найден метод расширения «InputForm», принимающий первый аргумент типа «System.Web.Mvc.HtmlHelper» (отсутствуют ли директиву using или ссылку на сборку?)

Если я сначала установлю Spark, то InputBuilder:

Не удалось найти представление InputForm или его мастер. Были обысканы следующие места:

~ / Просмотры / Главная / InputForm.aspx

~ / Просмотры / Shared / InputForm.aspx

~ / Просмотры / InputBuilders / InputForm.aspx

~ / Просмотры / Главная / InputForm.ascx

~ / Просмотры / Shared / InputForm.ascx


person Daniel Liuzzi    schedule 17.11.2009    source источник


Ответы (2)


Измените input.spark на:

<use namespace="MvcContrib.UI.InputBuilder"/>
<use namespace="MvcContrib.UI.InputBuilder.Views"/>
<add namespace="Web.Models"/>
<viewdata model="SampleInput" />
!{Html.InputForm()}

Добавление в web.config не работает в Spark. Вместо этого вы можете использовать _global.spark.

Есть еще одна проблема. В стабильной версии Spark свойство SparkView Html имеет тип HtmlHelper, а не HtmlHelper<TModel>. Функция Html.InputForm() работает только для HtmlHelper<TModel>, поэтому вам придется загрузить исходный код Spark и использовать сборку для разработки, поскольку она была недавно изменена. Вы также можете скачать стабильные исходники и изменить их самостоятельно. Вот некоторая информация:

http://groups.google.com/group/spark-dev/browse_thread/thread/618bd44a94368d22/f7df24e52924f4dc?show_docid=f7df24e52924f4dc

person LukLed    schedule 18.11.2009
comment
Это именно те детали, за которыми я охотился! Основная ревизия от GitHub работала безупречно. К вашему сведению, Spark действительно поддерживает добавление к выполнению импорта в web.config, поэтому вам не нужно повторять их во всех ваших представлениях. Все, что вам нужно сделать, это указать SparkSectionHandler в configSections. В любом случае, спасибо за такой информативный и полезный ответ! Ваше здоровье. - person Daniel Liuzzi; 18.11.2009
comment
Вы также можете использовать стабильную сборку и создать собственный производный класс SparkView, который предоставляет HtmlHelper<TModel>: groups.google.com/group/spark-dev/browse_thread/thread/ - person Tom Mayfield; 25.01.2010

Вы на правильном пути с настройкой построителей ввода, а затем движка Spark View. Из исходного файла из mvccontrib видно, что вам нужно, чтобы это пространство имен было определено MvcContrib.UI.InputBuilder.Views для вашего представления, чтобы ссылаться на HtmlHelper Extensions построителей ввода.

http://github.com/mvccontrib/MvcContrib/blob/master/src/MVCContrib/UI/InputBuilder/Views/HtmlExtensions.cs

Я написал построители ввода, но я недостаточно знаю о движке искрового представления, чтобы понять, почему он не разрешает ссылку на методы расширения для построителей ввода.

person Eric Hexter    schedule 17.11.2009
comment
Привет, Эрик, большое спасибо за уделенное время. К сожалению, я уже импортирую MvcContrib.UI.InputBuilder.Views, как вы можете видеть в моем Web.config; последние три импорта копируются прямо из исходного файла mvccontrib sample project. Есть еще какие-нибудь подсказки? - person Daniel Liuzzi; 18.11.2009