Как я могу заставить конструкторы ввода (MVC Contrib) работать с движком Spark View Engine?
-
20-09-2019 - |
Вопрос
Сегодня я потратил добрых три часа, пытаясь преобразовать проект MvcContrib.Samples.InputBuilders, включенный в Вклад MVC чтобы заставить его работать с Движок просмотра Spark, но пока не смог этого сделать.
У кого-нибудь есть догадки, почему эти двое просто не поладят?
Изменения, которые я внес
Форма ввода.искра:
<viewdata model="SampleInput" />
!{Html.InputForm()}
Глобальный.asax.cs:
...
protected void Application_Start() {
RegisterRoutes(RouteTable.Routes);
InputBuilder.BootStrap();
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new SparkViewFactory());
}
Web.конфигурация:
...
<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
~/Просмотры/Общие/InputForm.aspx
~/Views/InputBuilders/Вводная форма.aspx
~/Просмотры/Главная страница/InputForm.ascx
~/Просмотры/Общие/InputForm.ascx
Решение
Измените 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 и использовать development build , поскольку он был недавно изменен.Вы также можете загрузить стабильные исходные тексты и изменить их самостоятельно.Вот некоторая информация:
Другие советы
Вы на правильном пути, настроив средства построения входных данных, а затем движок просмотра spark.Вы можете видеть из исходного файла из mvccontrib, что вам нужно это пространство имен, определенное MvcContrib.UI.InputBuilder.Представления для вашего представления, чтобы ссылаться на расширения input builders HtmlHelper.
Я написал конструкторы ввода, но я недостаточно знаю о движке spark view engine, чтобы понять, почему он не разрешает ссылку на методы расширения для конструкторов ввода.