Как заставить Input Builders (MVC Contrib) работать с Spark View Engine? - PullRequest
1 голос
/ 17 ноября 2009

Сегодня я потратил добрых три часа, пытаясь преобразовать проект 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' может быть найдено (вы пропустили использование директива или ссылка на сборку?)

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

Представление InputForm или его мастер невозможно найти. Следующие места были найдены:

~ / Views / Home / InputForm.aspx

~ / Views / Shared / InputForm.aspx

~ / Views / InputBuilders / InputForm.aspx

~ / Views / Home / InputForm.ascx

~ / Views / Shared / InputForm.ascx

Ответы [ 2 ]

2 голосов
/ 18 ноября 2009

Изменить 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

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

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

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

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

...